Advertisement
libobil

Untitled

May 1st, 2022
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.35 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3.  
  4. const int maxn = 100000 + 10;
  5. const int mod = 998244353;
  6.  
  7. int a[maxn], n;
  8. int tree[maxn];
  9.  
  10. void update(int ix, int value)
  11. {
  12. for (int i = ix ; i < maxn ; i += i & (-i))
  13. {
  14. tree[i] += value;
  15. if (tree[i] >= mod) tree[i] -= mod;
  16. }
  17. }
  18.  
  19. int query(int ix)
  20. {
  21. int sum = 0;
  22. for (int i = ix ; i >= 1 ; i -= i & (-i))
  23. {
  24. sum += tree[i];
  25. if (sum >= mod) sum -= mod;
  26. }
  27.  
  28. return sum;
  29. }
  30.  
  31. std::pair < int, int > sorted[maxn];
  32. void solve()
  33. {
  34. for (int i = 1 ; i <= n ; ++i)
  35. sorted[i] = {a[i], i};
  36.  
  37. std::sort(sorted+1, sorted+1+n);
  38.  
  39. int cnt = 0;
  40. for (int i = 1 ; i <= n ; ++i)
  41. {
  42. cnt += (sorted[i].first != sorted[i-1].first);
  43. a[sorted[i].second] = cnt;
  44.  
  45. }
  46.  
  47. int ans = 0;
  48. for (int i = 1 ; i <= n ; ++i)
  49. {
  50. int curr = query(a[i])+1;
  51. ans += curr;
  52. if (ans >= mod) ans -= mod;
  53.  
  54. update(a[i], curr);
  55. }
  56.  
  57. std::cout << ans << '\n';
  58. }
  59.  
  60. void fastIO()
  61. {
  62. std::ios_base :: sync_with_stdio(0);
  63. std::cin.tie(nullptr);
  64. std::cout.tie(nullptr);
  65. }
  66.  
  67. void read()
  68. {
  69. std::cin >> n;
  70. for (int i = 1 ; i <= n ; ++i)
  71. std::cin >> a[i];
  72. }
  73.  
  74. int main ()
  75. {
  76. fastIO();
  77. read();
  78. solve();
  79.  
  80. return 0;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement