Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define int long long
- #define mp make_pair
- #define endl '\n'
- using namespace std;
- int a[100010];
- int cnt(int a[],int l,int r){
- int mid=l+r>>1;
- int ans=0;
- if(l+1==r) return 0;
- ans+=cnt(a,l,mid);
- ans+=cnt(a,mid,r);
- vector<int> lar,rar;
- for(int i=l;i<mid;i++)
- lar.push_back(a[i]);
- for(int i=mid;i<r;i++)
- rar.push_back(a[i]);
- int lptr=0,rptr=0,ptr=l;
- while(ptr<r){
- if(rptr>=rar.size() || (lptr<lar.size() && lar[lptr]<rar[rptr]))
- a[ptr++]=lar[lptr++];
- else
- a[ptr++]=rar[rptr++],ans+=lar.size()-lptr;
- }
- //cout << "MS " << l << ' ' << r << " ans= " << ans << endl;
- return ans;
- }
- signed main(){
- int kase=0;
- int n;
- while(cin >> n,n){
- for(int i=0;i<n;i++)
- cin >> a[i];
- cout << "Case #" << ++kase << ": " << cnt(a,0,n) << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement