没啥事干,就解决一下这个老少皆宜的问题吧~
这个东东基本上每个刷题网站题库多多少少都有亿点点题目,还是挺nice的
方法一在归并排序做两数组合并一个数组第一个while里的if,这里可以统计每一个逆序对
#includeusing namespace std; int a[1024],ans; void merge(int a[],int a_l,int b[],int b_l,int & c[]) { int i,j,k; i=j=k=0; while(i =rt) return; int mid=(lt+rt)/2; mergesort(a,lt,mid); mergesort(a,mid+1,rt); for(i=lt;i<=rt;i++) tmp[i]=a[i]; merge(tmp+lt,mid-lt+1,tmp+mid+1,rt-mid,a+lt);//合并 } int main(); { //读入a数组 mergesort(a,0,n-1) printf("%d",ans); }
.
.
方法二树状数组的简单算法,应该不用我解释吧?
#includeusing namespace std; typedef struct node { int v,id; bool operator < (const struct node & t)const { if(v==t.v) return id



