Advertisement
Guest User

Untitled

a guest
May 21st, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.20 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define siz 200009
  5. #define ll int
  6.  
  7. vector <ll> tree[3 * siz];
  8. ll ara[siz];
  9. long long cnt = 0;
  10.  
  11. void build(ll lo, ll hi, ll node)
  12.  
  13. {
  14.     if(lo == hi) {
  15.         tree[node].push_back( ara[lo] );
  16.         return;
  17.     }
  18.  
  19.     ll mid = (lo + hi) / 2;
  20.  
  21.     build(lo, mid, 2 * node);
  22.     build(mid + 1, hi, 2 * node + 1);
  23.  
  24.     merge(tree[2 * node].begin(), tree[2 * node].end(),
  25.           tree[2 * node + 1].begin(), tree[2 * node + 1].end(),
  26.           back_inserter(tree[node]) );
  27.  
  28.     for(ll i = 0; i < tree[2 * node + 1].size(); i++) {
  29.         ll indx = upper_bound(tree[2 * node].begin(), tree[2 * node].end(), tree[2 * node + 1][i] ) - tree[2 * node].begin();
  30.         //cout << indx << "  " << tree[2 * node][i] << endl;
  31.         cnt += (tree[2 * node].size() - indx);
  32.     }
  33. }
  34.  
  35. int main()
  36.  
  37. {
  38.     ll t;
  39.     cin >> t;
  40.     while(t--) {
  41.         cnt = 0;
  42.         ll n, in;
  43.         scanf("%d", &n);
  44.  
  45.         for(ll i = 1; i <= n; i++) {
  46.             scanf("%d", &ara[i]);
  47.         }
  48.  
  49.         build(1, n, 1);
  50.  
  51.         printf("%lld\n", cnt);
  52.         for(ll i = 0; i < 3 * siz; i++)
  53.             tree[i].clear();
  54.     }
  55.     return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement