Advertisement
Guest User

Untitled

a guest
Dec 6th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.35 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define IO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
  3. using namespace std;
  4. const int MX = 1e6+4;
  5. int n,before[MX],after[MX],arr[MX],seg[MX*4];
  6.  
  7. void update(int ind,int l,int r,int upd){
  8. if(upd > r || upd < l) return;
  9. if(l == r){
  10. seg[ind]++;
  11. return;
  12. }
  13. int mid = (l+r)/2;
  14. update(2*ind,l,mid,upd);
  15. update(2*ind+1,mid+1,r,upd);
  16. seg[ind] = seg[2*ind] + seg[2*ind+1];
  17. }
  18.  
  19. int query(int ind,int l, int r, int st, int ed){
  20. if(ed < l || st > r) return 0;
  21. if(st >= l && ed <= r) return seg[ind];
  22. int mid = (l+r)/2;
  23. int leftside = query(2*ind,l,mid,st,ed);
  24. int rightside = query(2*ind+1,mid+1,r,st,ed);
  25. return leftside + rightside;
  26. }
  27.  
  28. int main()
  29. {
  30. IO;
  31. cin>>n;
  32. map<int,int> m;
  33. for(int i=0;i<n;i++){
  34. cin>>arr[i];
  35. m[arr[i]]++;
  36. before[i] = m[arr[i]];
  37. }
  38. m.clear();
  39. for(int i=n-1;i>=0;i--){
  40. m[arr[i]]++;
  41. after[i] = m[arr[i]];
  42. }
  43. for(int i=0;i<n;i++) cout<<before[i]<<" "; cout<<endl;
  44. for(int i=0;i<n;i++) cout<<after[i]<<" "; cout<<endl;
  45. long long ans = 0;
  46. for(int i = n-1,j=0;i>=0;i--,j++){
  47. cout<<"query from 1 to "<<before[i]-1<<" returned ";
  48. int x = query(1,1,n,1,before[i]-1);
  49. cout<<x<<endl;
  50. ans+=x;
  51. update(1,1,n,after[i]);
  52. }
  53. cout<<ans<<endl;
  54. return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement