提交时间:2019-11-13 18:41:55

运行 ID: 2225

#include<iostream> #include<cstdio> #include<cstdlib> using namespace std; int a[110000]; __int64 num; void calculate(int *p,int l,int mid,int r) {     int *b = new int[r + 1];      int i,j,k;     for (i = l;i <= r;++i)     {         b[i] = p[i];     }      i = l,j = mid + 1,k = l;     while (i <= mid && j <= r)     {         if (b[i] <= b[j])              p[k++] = b[i++];         else         {             p[k++] = b[j++];             num += mid - i + 1;                }     }     while (i <= mid)   p[k++] = b[i++];          while (j <= r)  p[k++] = b[j++];           delete []b; } void dg(int *p,int l,int r) { int mid; if(l<r) { mid = (l + r) / 2; dg(p,l,mid); dg(p,mid + 1,r); calculate(p,l,mid,r); } } int main() { // freopen("b.txt","r",stdin);     int n; while(scanf("%d",&n)!=EOF) { for(int i = 0; i < n; i ++)   scanf("%d",&a[i]); num = 0;         dg(a,0,n-1);         printf("%I64d\n",num); } return 0; }