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
  • 相关阅读:
    Unzip 解压报错
    Linux ftp安装
    关于vsftp出现Restarting vsftpd (via systemctl): Job for vsftpd.service failed because the control 的解决办法
    ASP.NET开发知识总结
    移动端开发调试方法总结
    移动H5优化指南
    基于windows下,node.js之npm
    微服务理解
    SQL Server 触发器
    jQuery验证控件jquery.validate.js使用说明+中文API
  • 原文地址:https://www.cnblogs.com/shutdown113/p/9345674.html
Copyright © 2011-2022 走看看