zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    eclipse建立工作集管理项目
    echarts-x
    GeoJSON
    mysql 5.7 root password 过期
    kubernetes centos7
    JestClient
    树莓派镜像制作
    docker run elasticsearch
    vm.max_map_count
    远程访问jupyter notebook
  • 原文地址:https://www.cnblogs.com/shutdown113/p/9345674.html
Copyright © 2011-2022 走看看