Ural 1090. In the Army Now

来源:互联网 发布:iptv网络电视catv888 编辑:程序博客网 时间:2024/05/19 08:42

#include <iostream>#include <cstdio>#include <cstring>#include <map>#include <set>#include <stack>#include <queue>using namespace std;const int maxn=10010;int sum;int f[maxn*4];void Build(int n){    sum=0;    n=n<<2;    for(int i=0;i<=n;i++)     f[i]=0;}void update(int t,int l,int r,int k){    f[t]++;    if(l==r-1)        return;    int mid=(l+r)/2;    if(mid<k)    {        sum+=f[t<<1];        update(t<<1|1,mid,r,k);    }    else    {        update(t<<1,l,mid,k);    }}int main(){    //freopen("data","r",stdin);    int n,m;    scanf("%d%d",&n,&m);    int ans=0,pre=n*n,a;    for(int i=1;i<=m;i++)    {        Build(n);        for(int j=0;j<n;j++)        {            scanf("%d",&a);            update(1,0,n,a);        }        if(pre>sum)        {            pre=sum;            ans=i;        }    }    printf("%d\n",ans);    return 0;}

给出k个序列,求那个序列的逆序对最多。

用线段树求逆序对,树状数组也可以。