zoukankan      html  css  js  c++  java
  • hdu 2688

    这题,因为要统计之前有多少个数比当前的数小,所以我用的树状数组

    基本代码就是这样,还是比较好想的,只不过我没想出来罢了

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    using namespace std;
    int n,m;
    const int maxn = 10005;
    int c[10005]; //纪录每个值之前有多少个小于她的数
    int ans[3000005];
    int lowbit(int k);
    void add(int pos);
    int sum(int pos);
    int main()
    {
        int i,j,k;
        while(scanf("%d",&n) != EOF)
        {
            long long val=0;
            
            memset(c, 0, sizeof(c));
            memset(ans, 0, sizeof(ans));
            for(i=1;i<=n;++i)
            {
                scanf("%d",ans+i);
                add(ans[i]);
                val += sum(ans[i]-1);
            }
            scanf("%d",&m);
            for(i=0;i<m;++i)
            {
                char c;
                getchar();
                scanf("%c",&c);
                if(c == 'Q')
                    printf("%lld
    ",val);
                else
                {
                    int x,y;
                    scanf("%d%d",&x,&y);
    //                x++,y++;
                    int temp = ans[x];
                    for(j=x;j<y;++j)
                    {
                        ans[j]=ans[j+1];
                        if(ans[j]>temp) val --;
                        if(ans[j]<temp) val ++;
                    }
                    ans[y] = temp;
                }
            }
        }
    }
    void add(int pos)
    {
        while(pos<maxn)
        {
            c[pos] ++;
            pos += lowbit(pos);
        }
    }
    int sum(int pos)
    {
        int su=0;
        while(pos>0)
        {
            su+=c[pos];
            pos-=lowbit(pos);
        }
        return su;
    }
    int lowbit(int k)
    {
        return k&(-k);
    }
  • 相关阅读:
    Python核心编程——正则表达式
    Python 随笔之Redis
    我的第一个Python随笔
    python练习题-day20
    python练习题-day19
    python练习题-day18
    python练习题-day16
    python练习题-day15
    python练习题-day14
    python练习题-day13
  • 原文地址:https://www.cnblogs.com/mltang/p/8912014.html
Copyright © 2011-2022 走看看