Advertisement
minhkhoi1026

SeaGroup1

Mar 24th, 2020
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.49 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int n;
  6. int a[100010],fen[100010];
  7. pair<int,int> b[100010];
  8. vector < pair<int,int> > query;
  9.  
  10. int find_upper(int val)
  11. {
  12.     int l = 1, r = n, mid = 0, id = -1;
  13.     while (l <= r)
  14.     {
  15.         mid = (l + r) / 2;
  16.         if (val > b[mid].first){
  17.             id = mid;
  18.             l =  mid + 1;
  19.         }
  20.         else r = mid - 1;
  21.     }
  22.     return id;
  23. }
  24.  
  25. void update(int p)
  26. {
  27.     for (int i = p; i <= n; i += i & -i)
  28.         fen[i] += 1;
  29. }
  30.  
  31. long long count_pos(int p)
  32. {
  33.     long long cnt = 0;
  34.     for (int i = p; i > 0; i -= i & -i)
  35.         cnt += fen[i];
  36.     return cnt;
  37. }
  38.  
  39. int main()
  40. {
  41.     ios_base::sync_with_stdio(false);
  42.     cin.tie(false);
  43.  
  44.     freopen("test.inp", "r", stdin);
  45.  
  46.     scanf("%d", &n);
  47.     for (int i = 1; i <= n; i++)
  48.     {
  49.         scanf("%d", &a[i]);
  50.         b[i] = {-a[i],i};
  51.     }
  52.     sort(b + 1, b + n + 1);
  53.  
  54.     for (int i = 1; i <= n; i++)
  55.     {
  56.         int j = find_upper(a[i]);
  57.         if (j != -1)
  58.             query.push_back({j,i});
  59.     }
  60.     sort(query.begin(), query.end(), greater< pair<int,int> >());
  61.  
  62.     long long res = 0;
  63.     for (int i = 1; i <= n; i++)
  64.     {
  65.         if (-b[i].first >= 0) res -= i - 1;
  66.         update(b[i].second);
  67.         while (i == query.back().first)
  68.         {
  69.             if (query.back().second - 1 > 0)
  70.                 res += count_pos(query.back().second);
  71.             query.pop_back();
  72.         }
  73.     }
  74.  
  75.     cout << res;
  76.  
  77.     return 0;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement