Link to this code:
https://cses.fi/paste/e94e29601d5c9128cd51ff/
#include "bits/stdc++.h"
using namespace std;
constexpr int MOD = 1e9 + 7;
void update(vector<int>& bit, int index, const int delta) {
const int n = (int)bit.size();
for (; index < n; index += index & -index)
(bit[index] += delta) %= MOD;
}
int query(const vector<int>& bit, int index) {
int sum = 0;
for (; index > 0; index -= index & -index)
(sum += bit[index]) %= MOD;
return sum;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
vector<int> a(n);
for (auto& x : a)
cin >> x;
vector<int> idx(n), rank(n, 1);
iota(idx.begin(), idx.end(), 0);
sort(idx.begin(), idx.end(), [&](int i, int j) {return a[i] < a[j];});
int m = 1;
for (int i = 1; i < n; i++)
rank[idx[i]] = m += (a[idx[i]] != a[idx[i - 1]]);
vector<int> bit(m + 1);
for (const auto& r : rank)
update(bit, r, query(bit, r - 1) + 1);
cout << query(bit, m) << '\n';
}