zoukankan      html  css  js  c++  java
  • HDOJ1166(敌兵布阵)

    维护一个整数序列,支持3种操作:

    1、将指定的数加上一个值;

    2、将指定的数减去一个值;

    3、查询指定区间的和。

    View Code
    #include <stdio.h>
    #define N 50001
    int t,n,D;
    int sum[4*N];
    void init()
    {
        int i;
        for(D=1;D<n+2;D<<=1);
        for(i=1;i<2*D;i++)  sum[i]=0;
        for(i=1;i<=n;i++)   scanf("%d",&sum[i+D]);
        for(i=D-1;i^1;i--)  sum[i]=sum[i<<1]+sum[i<<1|1];
    }
    void update(int x,int y)
    {
        sum[x+D]+=y;
        for(x=x+D;x^1;x>>=1) sum[x>>1]=sum[x]+sum[x^1];
    }
    void get(int x,int y)
    {
        int i=x+D-1,j=y+D+1,ret=0;
        for(;i^j^1;i>>=1,j>>=1)
        {
            if(~i&1)    ret+=sum[i^1];
            if(j&1) ret+=sum[j^1];
        }
        printf("%d\n",ret);
    }
    int main()
    {
        int a,b,kase=0;
        char s[10];
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d",&n);
            init();
            printf("Case %d:\n",++kase);
            while(1)
            {
                s[0]=0;
                while(s[0]!='A' && s[0]!='Q' && s[0]!='S' && s[0]!='E') scanf("%s",s);
                if(s[0]=='E')   break;
                scanf("%d%d",&a,&b);
                if(s[0]=='A')   update(a,b);
                else if(s[0]=='S')  update(a,-b);
                else    get(a,b);
            }
        }
        return 0;
    }
  • 相关阅读:
    Collection
    DP
    JVM
    算法 *-* 并查集Union-Find(连通性)
    log4j
    log4j
    第254期:宠物如何导航回家
    第254期:宠物如何导航回家
    多线程
    多线程
  • 原文地址:https://www.cnblogs.com/algorithms/p/2586547.html
Copyright © 2011-2022 走看看