Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- const int maxn = 100000 + 10;
- const int mod = 998244353;
- int a[maxn], n;
- int tree[maxn];
- void update(int ix, int value)
- {
- for (int i = ix ; i < maxn ; i += i & (-i))
- {
- tree[i] += value;
- if (tree[i] >= mod) tree[i] -= mod;
- }
- }
- int query(int ix)
- {
- int sum = 0;
- for (int i = ix ; i >= 1 ; i -= i & (-i))
- {
- sum += tree[i];
- if (sum >= mod) sum -= mod;
- }
- return sum;
- }
- std::pair < int, int > sorted[maxn];
- void solve()
- {
- for (int i = 1 ; i <= n ; ++i)
- sorted[i] = {a[i], i};
- std::sort(sorted+1, sorted+1+n);
- int cnt = 0;
- for (int i = 1 ; i <= n ; ++i)
- {
- cnt += (sorted[i].first != sorted[i-1].first);
- a[sorted[i].second] = cnt;
- }
- int ans = 0;
- for (int i = 1 ; i <= n ; ++i)
- {
- int curr = query(a[i])+1;
- ans += curr;
- if (ans >= mod) ans -= mod;
- update(a[i], curr);
- }
- std::cout << ans << '\n';
- }
- void fastIO()
- {
- std::ios_base :: sync_with_stdio(0);
- std::cin.tie(nullptr);
- std::cout.tie(nullptr);
- }
- void read()
- {
- std::cin >> n;
- for (int i = 1 ; i <= n ; ++i)
- std::cin >> a[i];
- }
- int main ()
- {
- fastIO();
- read();
- solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement