hdu2688树状数组

来源:互联网 发布:手机 ipv6网络电视 编辑:程序博客网 时间:2024/05/16 23:36
#include<cstdio>#include<cstring>#include<cstdlib>const int maxn=30000005;typedef __int64 ll;int n,a[maxn];ll c[10005];int lowbit(int x){    return x & (-x);}void Update(int x){   while(x<=10000)   {       c[x]++;       x+=lowbit(x);   }}ll Query(int x){    ll ans=0;    while(x>0)    {        ans+=c[x];        x-=lowbit(x);    }    return ans;}int main(){    while(~scanf("%d",&n))    {        for(int i=1;i<=n;i++)            scanf("%d",&a[i]);        memset(c,0,sizeof(c));        int m,x,y;        char ch[2];        ll ans=0;        for(int i=1;i<=n;i++)        {            ans+=Query(a[i]-1);            Update(a[i]);        }        scanf("%d",&m);        for(int i=1;i<=m;i++)        {            scanf("%s",ch);            if(ch[0]=='Q')            {                printf("%I64d\n",ans);            }            else            {                scanf("%d %d",&x,&y);                x++,y++;                int t=a[x];                for(int j=x;j<y;j++)                {                    a[j]=a[j+1];                    if(t>a[j])                        ans++;                    if(t<a[j])                        ans--;                }                a[y]=t;            }        }    }    return 0;}

0 0
原创粉丝点击