HDOJ 1166.敌兵布阵
2015-06-08
问题简述:
原题的题意相当于有一些连续摆放的箱子,里面装着球,球的数量可以加减,现要查询几个连续的箱子里球的总数,其中存在放球和拿球的操作。
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166
解题思路:
查询区间和的问题,可以使用线段树。
最初的输入相当于构建线段树的过程;每一次的加减相当于对线段树进行更新;最后使用线段树的查询区间和算法直接得出答案。
源代码:
/*
OJ: HDOJ
ID: forever
TASK: 1166.敌兵布阵
LANG: C++
NOTE: 线段树
*/
#include <cstdio> const int MAX=;
int a[MAX];
char str[]; void build(int l,int r,int flag) {
if(l==r) {
scanf("%d",&a[flag]);
return;
}
int m=(l+r)/;
build(l,m,flag*);
build(m+,r,flag*+);
a[flag]=a[flag*]+a[flag*+];
} void update(int x,int y,int l,int r,int flag) {
if(l==r) {
a[flag]+=y;
return;
}
int m=(l+r)/;
if(x<=m)
update(x,y,l,m,flag*);
else
update(x,y,m+,r,flag*+);
a[flag]=a[flag*]+a[flag*+];
} int query(int x,int y,int l,int r,int flag) {
if(x<=l&&r<=y)
return a[flag];
int m=(l+r)/;
int ans=;
if(x<=m)
ans+=query(x,y,l,m,flag*);
if(y>m)
ans+=query(x,y,m+,r,flag*+);
return ans;
} int main()
{
int t,n,x,y,k=;
scanf("%d",&t);
while(t--) {
scanf("%d",&n);
build(,n,);
printf("Case %d:\n",k++);
while(scanf("%s",str)&&str[]!='E') {
scanf("%d %d",&x,&y);
if(str[]=='Q')
printf("%d\n",query(x,y,,n,));
else if(str[]=='A')
update(x,y,,n,);
else if(str[]=='S')
update(x,-y,,n,);
}
}
return ;
}
HDOJ 1166.敌兵布阵的更多相关文章
- 线段树(单点更新)/树状数组 HDOJ 1166 敌兵布阵
题目传送门 /* 线段树基本功能:区间值的和,修改某个值 */ #include <cstdio> #include <cstring> #define lson l, m, ...
- hdoj 1166 敌兵布阵【线段树求区间最大值+单点更新】
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- hdoj 1166 敌兵布阵 线段数和树状数组
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- hdoj 1166 敌兵布阵(树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 思路分析:该问题为动态连续和查询问题,使用数组数组可以解决:也可使用线段树解决该问题: 代码如下 ...
- HDOJ 1166 敌兵布阵 (线段树)
题目: Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Ti ...
- HDOJ(HDU).1166 敌兵布阵 (ST 单点更新 区间求和)
HDOJ(HDU).1166 敌兵布阵 (ST 单点更新 区间求和) 点我挑战题目 题意分析 根据数据范围和询问次数的规模,应该不难看出是个数据结构题目,题目比较裸.题中包括以下命令: 1.Add(i ...
- HDU 1166 敌兵布阵 (树状数组)
题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=1166 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) ...
- hdu acm 1166 敌兵布阵 (线段树)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- hud 1166 敌兵布阵
http://acm.hdu.edu.cn/showproblem.php?pid=1166 敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory ...
随机推荐
- 减小Delphi的Exe文件大小(11种方法)
一般来说,由Delphi生成的EXE文件,要比其由它编程语言生成的体积大一些.这主要是由于使用VCL的原因(当然,VCL是有许多优点的!) 以下是减小EXE文件大小的几种途径: 01) 使用加壳工具( ...
- nginx 通过rsyslog发日志 rsyslog服务器挂掉 日志丢失问题
nginx 配置: user nginx; worker_processes 1; syslog local5 nginx-zjzc01; rsyslog 服务器收到的消息: -rw-r--r-- 1 ...
- perl 升级到5.20版本
不建议先rm 先下载tar.gz ...然後手动安装..default 安装到/usr/local/目录下.. 然後修改/usr/bin/perl的symbolic link到/usr/local/b ...
- POJ1185 炮兵阵地 状态压缩
因为不知道不同的博客怎么转,就把别人的复制过来了,这个题解写的非常好,原地址为: http://hi.baidu.com/wangxustf/item/9138f80ce2292b8903ce1bc7 ...
- [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(一)
目的: 结合现在比较流行的技术,通过一个demo 展示一个全栈式设计的各种技能. 一个全栈式的工程师,应该能设计通过verilog/VHDL做logical设计.能写内核驱动,能架站. 要熟悉veri ...
- UVa 10491 Cows and Cars (概率&广义三门问题 )
10491 - Cows and Cars Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onli ...
- IHttpModule与IHttpHandler的区别整理
IHttpModule与IHttpHandler的区别整理1.先后次序.先IHttpModule,后IHttpHandler. 注:Module要看你响应了哪个事件,一些事件是在Handler之前运行 ...
- jquery数字验证大小比较
$("#rewardForm").validate({ rules: { "reward": { ...
- gulp使用心得
本文假设你之前没有用过任何任务脚本(task runner)和命令行工具,一步步教你上手Gulp.不要怕,它其实很简单,我会分为五步向你介绍gulp并帮助你完成一些惊人的事情.那就直接开始吧. 第一步 ...
- 【攻防实战】SQL注入演练!
这篇文章目的是让初学者利用SQL注入技术来解决他们面临的问题, 成功的使用它们,并在这种攻击中保护自己. 1.0 介绍 当一台机器只打开了80端口, 你最依赖的漏洞扫描器也不能返回任何有用的内容, 并 ...