• hdu1166(树状数组)


    敌兵布阵

    题意:

      第一行一个整数T,表示有T组数据。每组数据第一行一个正整数N(N<=50000),表示敌人有N个工兵营地,接下来有N个正整数,第i个正整数ai代表第i个工兵营地里开始时有ai个人(1<=ai<=50)。接下来每行有一条命令,命令有4种形式:
    (1) Add i j,i和j为正整数,表示第i个营地增加j个人(j不超过30)
    (2)Sub i j ,i和j为正整数,表示第i个营地减少j个人(j不超过30);
    (3)Query i j ,i和j为正整数,i<=j,表示询问第i到第j个营地的总人数;
    (4)End 表示结束,这条命令在每组数据最后出现;

    分析:

      线段树和树状数组的模板题。

    代码:

    #include <map>
    #include <queue>
    #include <vector>
    #include <math.h>
    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    #define ll long long
    #define ull unsigned long long
    #define cls(x) memset(x,0,sizeof(x))
    #define clslow(x) memset(x,-1,sizeof(x))
    
    const int maxn=1e5+100;
    
    int T,n;
    
    char s[10];
    int a[maxn],bit[maxn];
    
    int lowbit(int x)
    {
        return x&-x;
    }
    
    void update(int x,int add)
    {
        while(x<=n)
        {
            bit[x]+=add;
            x+=lowbit(x);
        }
    }
    
    int sum(int x)
    {
        int res=0;
        while(x>0)
        {
            res+=bit[x];
            x-=lowbit(x);
        }
        return res;
    }
    
    int query(int x,int y)
    {
        return sum(y)-sum(x-1);
    }
    
    int main()
    {
    //    freopen("in.txt","r",stdin);
        scanf("%d",&T);
        for(int Case=1;Case<=T;Case++){
            cls(bit);
            scanf("%d",&n);
            for(int i=1;i<=n;i++){
                scanf("%d",&a[i]);
                update(i,a[i]);
            }
    
            printf("Case %d:
    ",Case);
            while(scanf("%s",s))
            {
                if(strcmp(s,"End")==0)  break;
                int i,j;
                scanf("%d%d",&i,&j);
                if(strcmp(s,"Sub")==0)  j=-j;
                if(strcmp(s,"Query")==0)    printf("%d
    ",query(i,j));
                else    update(i,j);
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    回头再看libpcap
    lex error
    perl 的威力
    什么叫回流和重绘?
    HTTP协议与FTP协议的区别【转】
    Linux操作系统Redhat系列与Debian系列 【转】
    dock是什么? docker就是集装箱原理【转】
    光端机的作用【转】
    c++ -- call_once用法
    c++ -- thread详细解析
  • 原文地址:https://www.cnblogs.com/shutdown113/p/9345674.html
Copyright © 2020-2023  润新知