hdu 1166 敌兵布阵
敌兵布阵
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 30838 Accepted Submission(s): 13230
中央情报局要研究敌人究竟演习什么战术,所以Tidy要随时向Derek汇报某一段连续的工兵营地一共有多少人,例如Derek问:“Tidy,马上汇报第3个营地到第10个营地共有多少人!”Tidy就要马上开始计算这一段的总人数并汇报。但敌兵营地的人数经常变动,而Derek每次询问的段都不一样,所以Tidy不得不每次都一个一个营地的去数,很快就精疲力尽了,Derek对Tidy的计算速度越来越不满:"你个死肥仔,算得这么慢,我炒你鱿鱼!”Tidy想:“你自己来算算看,这可真是一项累人的工作!我恨不得你炒我鱿鱼呢!”无奈之下,Tidy只好打电话向计算机专家Windbreaker求救,Windbreaker说:“死肥仔,叫你平时做多点acm题和看多点算法书,现在尝到苦果了吧!”Tidy说:"我知错了。。。"但Windbreaker已经挂掉电话了。Tidy很苦恼,这么算他真的会崩溃的,聪明的读者,你能写个程序帮他完成这项工作吗?不过如果你的程序效率不够高的话,Tidy还是会受到Derek的责骂的.
每组数据第一行一个正整数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 表示结束,这条命令在每组数据最后出现;
每组数据最多有40000条命令
对于每个Query询问,输出一个整数并回车,表示询问的段中的总人数,这个数保持在int以内。
#include<stdio.h> struct node {int l;int r;int sum; }p[1000000]; int ans; void build_t(int t,int l,int r) {p[t].r=r;p[t].l=l;p[t].sum=0;if(r==l)return;int temp=2*t;int mid=(l+r)/2;build_t(temp,l,mid);build_t(temp+1,mid+1,r); } void add(int t,int l,int k) {if(p[t].l==p[t].r){p[t].sum+=k;return;}int temp=2*t;int mid=(p[t].l+p[t].r)>>1;if(l<=mid)add(temp,l,k);elseadd(temp+1,l,k);p[t].sum=p[temp].sum+p[temp+1].sum;} void query(int t,int l,int r) {if(p[t].r==r&&p[t].l==l){ans+=p[t].sum;return;}int temp=t<<1;int mid=(p[t].r+p[t].l)>>1;if(r<=mid)query(temp,l,r);else if(l>mid)query(temp+1,l,r);else{query(temp,l,mid);query(temp+1,mid+1,r);}} int main() {int t,i,x,y,n,cnt=1;char c[10];scanf("%d",&t);while(t--){scanf("%d",&n);build_t(1,1,n);for(i=1;i<=n;i++){scanf("%d",&x);add(1,i,x);}scanf("%s",c);printf("Case %d:\n",cnt++);while(c[0]!='E'){scanf("%d %d",&x,&y);if(c[0]=='Q'){ans=0;query(1,x,y);printf("%d\n",ans);}else if(c[0]=='A'){add(1,x,y);}else if(c[0]=='S')add(1,x,-y);scanf("%s",c);}}return 0; }
树状数组
#include<stdio.h> #include<string.h> int c[200000]; int n; int lowbit(int x) {return x&(-x); } void add(int x,int k) {while(x<=n){c[x]+=k;x=x+lowbit(x);} } int Sum(int y) {int sum=0;while(y>0){sum+=c[y];y=y-lowbit(y);}return sum; } int main() {int i,t,x,y,a,cnt=1;char cc[10];scanf("%d",&t);while(t--){memset(c,0,sizeof(c));scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d",&a);add(i,a);}scanf("%s",cc);printf("Case %d:\n",cnt++);while(cc[0]!='E'){scanf("%d %d",&x,&y);if(cc[0]=='Q')printf("%d\n",Sum(y)-Sum(x-1));else if(cc[0]=='A')add(x,y);elseadd(x,-y);scanf("%s",cc);}}return 0; }
转载于:https://www.cnblogs.com/llei1573/p/3257504.html
hdu 1166 敌兵布阵相关推荐
- hdu 1166 敌兵布阵(单点更新)
hdu 1166 敌兵布阵(基本操作) 有三种操作:询问区间总和,增加某个兵营的兵的数目,减少某个兵营的兵的数目.实际上也只有两个. 在更新的时候,每到一个区间就把当前区间的sum增加对应的数目,到达 ...
- HDU 1166 敌兵布阵(线段树:点更新,区间求和)
HDU 1166 敌兵布阵(线段树:点更新,区间求和) http://acm.hdu.edu.cn/showproblem.php?pid=1166 题意: 给你n个整数,然后给你多条命令,每条命令如 ...
- 树状数组板子题之一:hdu 1166 敌兵布阵
树状数组板子题之一:hdu 1166 敌兵布阵 题目链接:hdu 1166 敌兵布阵 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手 ...
- hdu 1166 敌兵布阵 (线段树)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- HDU 1166 敌兵布阵
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- hdu 1166 敌兵布阵(线段树之 单点更新+区间求和)
敌兵布阵 Time Limit: 2000/10 ...
- hdu 1166 敌兵布阵 树状数组
敌兵布阵 Time Limit: 2000/1000 ...
- 【树状数组】HDU 1166 敌兵布阵
敌兵布阵 日常题目胡乱总结 是个裸的树状数组qwq 区间查询+单点修改 字符判断相等那个地方我开始用的单引号 ' ' 直接不通过编译QAQ 第一遍交没有在一组数据结束后清空c数组 WA的让我很懵逼 ...
- HDU 1166 敌兵布阵 【线段树-点修改--计算区间和】
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
最新文章
- 关于oracle spfile配置文件问题
- msdn关于Visual C++ 编译器选项的说明
- STM32 基础系列教程 20 - RTC
- c语言fgetc()函数(从指定的流 stream 获取下一个字符(一个无符号字符),并把位置标识符往前移动)
- php 挂机,用php实现qq挂机
- PHP 使用程序进行数据库字典文件生成 导出数据库字典
- java手机音乐文件夹,从原始文件夹打开音乐文件,使用Android上的意图在设备的默认应用程序上播放...
- android 对话框的父view是谁,android – 在对话框中获取相对于其父级的视图位置
- mysql中不要 秒的函数_Mysql中日期和时间函数应用不用求人 | 很文博客
- 您可能不知道可以使用Chrome开发者控制台执行的操作
- 河南省某炮旅的RAID5恢复
- windows10下安装JDK及环境变量设置
- indesign文字怎么绕排图片形状_indesign透明度怎么调整?indesign怎么设置图片透明度?...
- 单通道图像保存_3D图像展示篇结构更清晰
- BZOJ1296[SCOI2009] 粉刷匠
- 图片怎么做雕刻路径_浮雕做图的简要步骤
- 安装vs 2015 社区版
- 微信手机号授权解密失败问题现象和解决方法: getPhoneNumber
- 计算机桌面图标怎样变大变小,win7电脑桌面图标变大怎么恢复?win7桌面图标怎么变小?...
- 那个直播软件有软件测试课程,资讯详情-直播软件有哪些测试方法-柠檬班-自动化测试-软件测试培训-自学官网...
热门文章
- 1.1 基本图像导入、处理和导出
- 金字塔式梯度方向直方图(PHOG)
- DFS求连通块数目(深搜)
- SpringSecurity csrf验证忽略某些请求
- Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) E. DNA Evolution 树状数组
- linux基础-第十单元 系统的初始化和服务
- Hibernate HQL的update方法详解
- javascript 注意事项
- C#获取数据库表信息,列信息
- cPanel下安装GodaddySSL教程