poj 2299 求逆序数

简介: http://poj.org/problem?id=2299 #include using namespace std; int aa[500010],bb[500010]; long long s=0; void merge(int l,int m,int r) { ...

http://poj.org/problem?id=2299

#include<iostream>
using namespace std;
int aa[500010],bb[500010];
long long  s=0;
void merge(int l,int m,int r)
{
     int i=l,j=m+1,t=0;
     while(i<=m&&j<=r)
     {
          if(aa[i]>aa[j])
          {
               bb[t++]=aa[j++];
               s+=m-i+1;
          }
          else
          {
               bb[t++]=aa[i++];
          }
     }
     while(i<=m)
          bb[t++]=aa[i++];
     while(j<=r)
          bb[t++]=aa[j++];
     for(int i=0;i<t;i++)
     {
          aa[l+i]=bb[i];
     }
}
void Msort (int L,int R)
{
    int cen;
    if(L<R)
    { cen=(L+R)/2;
    Msort(L,cen);
    Msort(cen+1,R);
    merge(L,cen,R);

    }

}
void merge_sort(int *a,int n)
{ Msort(0,n-1);

}
int main()
{
    int n;
    while(cin>>n)
    {
        if(n==0)break;

    for(int i=0;i<n;i++)
    {
        cin>>aa[i];
    }
    merge_sort(aa,n);

    cout<<s<<endl;
     s=0;
     }
    return 0;

}

 

相关文章
|
算法 数据建模 机器学习/深度学习
|
人工智能 算法 BI
poj 2192 Zipper
题目链接:http://poj.org/problem?id=2192 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18658   Accepted: 6651 Description Given ...
955 0
|
测试技术
poj-1218 THE DRUNK JAILER 喝醉的狱卒
自己去看看原题; 题目大意: 就是一个狱卒喝醉了,他第一趟吧所有的监狱都带开,第二趟把能把二整除的监狱关闭,第三趟操作能把三整除的监狱; 求最后能逃跑的罪犯数 输入第一个数是代表 测试数据组数 每个数据代表狱卒来回的次数 当作开关问题即可 #include using names...
961 0
|
人工智能 BI
poj-3185-开关问题
描述   牛一行20他们喝的水碗。碗可以那么(面向正确的为清凉水)或颠倒的(一个位置而没有水)。他们希望所有20个水碗那么,因此用宽鼻子翻碗。   嘴太宽,他们不仅翻转一碗还碗的碗两侧(总共三个或三个——在两端的情况下碗——两碗)。
786 0
poj-1008-玛雅历
Description 上周末,M.A. Ya教授对古老的玛雅有了一个重大发现。从一个古老的节绳(玛雅人用于记事的工具)中,教授发现玛雅人使用了一个一年有365天的叫做Haab的历法。这个Haab历法拥有19个月,在开始的18个月,一个月有20天,月份的名字分别是pop, no, zip, zotz, tzec, xul, yoxkin, mol, chen, yax, zac, ceh, mac, kankin, muan, pax, koyab, cumhu。
855 0
|
机器学习/深度学习 算法
|
人工智能 机器学习/深度学习