zoukankan      html  css  js  c++  java
  • 求逆序数 noj117

    #include<iostream>
    #include<cstdio>
    using namespace std;
    #define N 1000000010
    #define M 1000010
    __int64 sum;
    //long long sum;
    int a[M],L[M/2+1],R[M/2+1];
    
    void merger(int beg,int mid,int end)
    {
    //	cout<<"A:"<<beg<<" "<<mid<<" "<<end<<endl;
    	int L_len=mid-beg,R_len=end-mid-1;
    	int i,j,k;
    	for(i=0;i<=L_len;i++)
    		L[i]=a[beg+i];
    	for(j=0;j<=R_len;j++)
    		R[j]=a[mid+j+1];
    	L[L_len+1]=R[R_len+1]=N;
    	i=j=0;
    	for(k=beg;k<=end;k++)
    	{
    		if(L[i]<=R[j])
    			a[k]=L[i++];
    		else
    		{
    			a[k]=R[j++];
    			sum+=L_len-i+1;
    		}
    	}
    //	for(i=0;i<=end;i++)
    //		cout<<a[i]<<" ";
    //	cout<<endl<<endl;
    }
    
    void mergerSort(int beg,int end)
    {
    	int mid=(beg+end)>>1;
    	if(beg<end)
    	{
    		mergerSort(beg,mid);
    		mergerSort(mid+1,end);
    		merger(beg,mid,end);
    	}
    }
    
    int main()
    {
    //	freopen("in.txt","r",stdin);
    	int t,n;
    	cin>>t;
    	while(t--)
    	{
    		sum=0;
    		scanf("%d",&n);
    		for(int i=0;i<n;i++)
    		{
    			scanf("%d",&a[i]);
    		}
    		mergerSort(0,n-1);
    		printf("%Id64\n",sum);
    	//	printf("%lld\n",sum);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    [非专业翻译] Mapster
    [非专业翻译] Mapster
    排序之猴子算法
    1309游客统计
    1631低洼地
    1636车牌问题
    1638图形
    这是一篇小短文
    1500【自定义函数】走楼梯
    PHP 之表单提交大数据,数据不完整
  • 原文地址:https://www.cnblogs.com/yaling/p/2839779.html
Copyright © 2011-2022 走看看