归并排序求逆序对板子
int a[maxn],b[maxn];
int res;
void merge(int l,int r){
if(l==r)return;
int mid=l+r>>1;
merge(l,mid);merge(mid+1,r);
int i=l,j=mid+1,p=l;
while(i<=mid&&j<=r){
if(a[i]<=a[j]){
b[p++]=a[i];i++;
}else{
b[p++]=a[j];j++;
res+=mid+1-i;
}
}
while(i<=mid){
b[p++]=a[i++];
}
while(j<=r){
b[p++]=a[j++];
}
for(int s=l;s<=r;s++){
a[s]=b[s];
}
}

浙公网安备 33010602011771号