Ishmam_Rahman

INVCNT - Inversion Count

Jun 4th, 2020
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.15 KB | None | 0 0
  1.  
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4.  
  5. typedef vector<long long> vll;
  6.  
  7. #define ll          long long
  8. #define pb          push_back
  9. #define sz          size()
  10. #define all(a)      a.begin(),a.end()
  11. #define mem(a,b)    memset(a,b,sizeof(a))
  12.  
  13. ll arr[200005],n,res;
  14. vll v[200005];
  15. void update(int idx,int val) {
  16.     while(idx<=n) {
  17.         v[idx].pb(val);
  18.         idx+=(idx & -idx);
  19.     }
  20. }
  21.  
  22. void query(int idx, ll val) {
  23.  
  24.     while(idx>0) {
  25.         int pos;
  26.         pos=upper_bound(all(v[idx]),val)-v[idx].begin();
  27.         res+=(v[idx].sz-pos);
  28.         idx-=(idx & -idx);
  29.     }
  30. }
  31.  
  32.  
  33. int main()
  34. {
  35.    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  36.     int t; cin>>t;
  37.     cout<<endl;
  38.     char ch;
  39.     while(t--) {
  40.         char ignore[10];
  41.         cin.getline(ignore,10);
  42.  
  43.         cin>>n;
  44.         for(int i=1;i<=n;i++) {
  45.             cin>>arr[i];
  46.             update(i,arr[i]);
  47.         }
  48.  
  49.         for(int i=1;i<=n;i++) sort(all(v[i]));
  50.         res=0;
  51.         for(int i=1;i<=n;i++) {
  52.             query(i,arr[i]);
  53.         }
  54.         cout<<res<<endl;
  55.         for(int i=1;i<=n;i++) v[i].clear();
  56.         mem(arr,0);
  57.     }
  58. }
Advertisement
Add Comment
Please, Sign In to add comment