Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define IO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
- using namespace std;
- const int MX = 1e6+4;
- int n,before[MX],after[MX],arr[MX],seg[MX*4];
- void update(int ind,int l,int r,int upd){
- if(upd > r || upd < l) return;
- if(l == r){
- seg[ind]++;
- return;
- }
- int mid = (l+r)/2;
- update(2*ind,l,mid,upd);
- update(2*ind+1,mid+1,r,upd);
- seg[ind] = seg[2*ind] + seg[2*ind+1];
- }
- int query(int ind,int l, int r, int st, int ed){
- if(ed < l || st > r) return 0;
- if(st >= l && ed <= r) return seg[ind];
- int mid = (l+r)/2;
- int leftside = query(2*ind,l,mid,st,ed);
- int rightside = query(2*ind+1,mid+1,r,st,ed);
- return leftside + rightside;
- }
- int main()
- {
- IO;
- cin>>n;
- map<int,int> m;
- for(int i=0;i<n;i++){
- cin>>arr[i];
- m[arr[i]]++;
- before[i] = m[arr[i]];
- }
- m.clear();
- for(int i=n-1;i>=0;i--){
- m[arr[i]]++;
- after[i] = m[arr[i]];
- }
- for(int i=0;i<n;i++) cout<<before[i]<<" "; cout<<endl;
- for(int i=0;i<n;i++) cout<<after[i]<<" "; cout<<endl;
- long long ans = 0;
- for(int i = n-1,j=0;i>=0;i--,j++){
- cout<<"query from 1 to "<<before[i]-1<<" returned ";
- int x = query(1,1,n,1,before[i]-1);
- cout<<x<<endl;
- ans+=x;
- update(1,1,n,after[i]);
- }
- cout<<ans<<endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement