这个要先离散化。。。然后还是树状数组求。。。。 #include<cstdio> #include<stdlib h=""> #include<string h=""> #include<string> #include<cmath> #include<cstring> #include<algorithm> #include<map> #include<set> #include<queue> #include<vector> using namespace std; typedef long long ll; int bit[500005],k[500005]; int n; struct node { int x; int p; }a[500005]; bool cmp(const node& a1,const node& a2) { return a1.x<a2 x="" int="" sum="" int="" i="" int="" s="0;" while="" i="">0) { s+=bit[i]; i-=i&-i; } return s; } void add(int i,int x) { while(i<=n) { bit[i]+=x; i+=i&-i; } } ll solve() { ll ans=0; for(int j=1;j<=n;j++) { ans+=j-1-sum(k[j]); add(k[j],1); } return ans; } int main() { // freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); while(scanf("%d",&n)!=EOF){ if(n==0) break; memset(k,0,sizeof(k)); memset(bit,0,sizeof(k)); for(int i=1;i<=n;i++) { scanf("%d",&a[i].x); a[i].p=i; } sort(a+1,a+n+1,cmp); for(int i=1;i<=n;i++) { k[a[i].p]=i; } // for(int i=1;i<=n;i++) // printf("%d ",k[i]); printf("%lld\n",solve()); } return 0; } </a2></vector></queue></set></map></algorithm></cstring></cmath></string></string></stdlib></cstdio>