HDU-1394-Minimum Inversion Number

来源:互联网 发布:淘宝外卖订餐网 编辑:程序博客网 时间:2024/06/05 10:49

       这次换做树状数组进行维护了,但是不知道为什么速度还是没降多少

#include<cstdio>#include<cstring>#include<iostream>using namespace std;const int inf=1<<29;const int maxn=1e4+100;int n,m,a[maxn],t[maxn];int lowbit(int x){    return x&(-x);}void Update(int x,int val){    for(;x<=m;x+=lowbit(x))        t[x]+=val;}int Sum(int x){    int ans=0;    for(;x>0;ans+=t[x],x-=lowbit(x));    return ans;}int main(){    while(scanf("%d",&n)!=EOF)    {        memset(t,0,sizeof(t));        m=2*n;        for(int i=1;i<=n;i++)        {            scanf("%d",&a[i]);            a[i]++;            a[i+n]=a[i];        }        int ans=inf,cnt=0;        for(int i=1;i<=n;i++)        {            Update(a[i],1);            cnt+=i-Sum(a[i]);        }        for(int i=1;i<=n;i++)        {            cnt+=n-Sum(a[i]);            cnt-=Sum(a[i])-1;            ans=min(ans,cnt);        }        printf("%d\n",ans);    }    return 0;}


0 0