HDOJ 1166 敌兵布阵
全裸的单点更新....
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;#define MAXN 50002
struct node
{int mid, l, r;int v;
}a[MAXN*4]; // 4倍?
int n;void pushUp(int e) { a[e].v = a[e<<1].v+a[e<<1|1].v; }
void build(int l, int r, int e) //CALL: build(1, n, 1)
{a[e].l=l, a[e].r=r;if(l==r){scanf("%d", &a[e].v);}else{a[e].mid = (l+r)>>1;build(l, a[e].mid, e<<1);build(a[e].mid+1, r, e<<1|1);pushUp(e); //以前的做法是先init空的树,再insert数据。现在没有insert了。所以要pushUp}
}void update(int p, int add, int l, int r, int e) //单点更新,CALL: update(p, add, 1, n, 1);
{if(l==r){a[e].v+=add;}else{if(p<=a[e].mid) update(p, add, l, a[e].mid, e<<1);else update(p, add, a[e].mid+1, r, e<<1|1);pushUp(e); //以前的做法是,随着update,每个经过的区间都先add}
}
int query(int L, int R, int l, int r, int e) //查询[L, R],CALL:query(L, R, 1, n, 1);
{int ret=0;if(L<=l && r<=R) //当前区间完全包含所查区间{ret+=a[e].v;}else // l L R r{if(L<=a[e].mid) ret+=query(L, R, l, a[e].mid, e<<1); // L<= midif(a[e].mid<R) ret+=query(L, R, a[e].mid+1, r, e<<1|1); //mid<R , 没有=号}return ret;
}int main()
{int t; scanf("%d", &t);for(int i=0; i<t; i++){printf("Case %d:\n", i+1);scanf("%d", &n);build(1, n, 1);for(char buf[10]; scanf("%s", &buf) && buf[0]!='E'; ){int a, b; scanf("%d%d", &a, &b);if(buf[0]=='Q') {printf("%d\n", query(a, b, 1, n, 1));}else if(buf[0]=='A'){update(a, b, 1, n, 1);}else if(buf[0]=='S'){update(a, -b, 1, n, 1);}}}
}
转载于:https://www.cnblogs.com/tclh123/archive/2011/09/19/2587063.html
HDOJ 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/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- 杭电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 ...
最新文章
- Openstack安装部署
- 设置网页打开默认全屏_提升Adsense收入的三个关键设置
- AI:2020年6月22日北京智源大会演讲分享之认知神经基础专题论坛——15:00-15:40刘嘉教授《From Representation to Comp: the Cognitive N》
- An internal error occurred during: Launching MVC on Tomcat 6.x.
- UGUI 自动布局的重叠BUG
- Python学习之路和隐藏特征
- CSS层叠样式选择器归纳
- 20171108 模拟题 T1
- 计算机代码如何使用方法,电脑定时自动关机代码怎么样使用
- Missing required icon file.Thebundle does not con
- SQL ALTER TABLE 语句在项目中的使用
- 我用Python写了一个做题软件控制台版。(支持Mod)
- 想学明白PostgreSQL,得先捋一捋体系架构
- java 实现回收站功能,回收站功能在 Linux 中的实现
- Prompt learning系列之入门篇
- Visual Studio 2012 安装包
- 信息安全知识竞赛试题
- 红米Android降级,红米Note 5(安卓9.0 不要降级刷低版本)纯净ROOT线刷包分享,一键救砖教程,轻松刷回官方系统,流畅如初!...
- 2021年芒种是几月几号?芒种习俗有哪些 ?
- Python 与金融科技5|批量抓取并保存上证50的交易数据
热门文章
- Windows 10第四个大补丸来啦
- Debain 安装ssh
- ubuntu设置字体编码GBK和UTF-8
- 舍不得孩子套不着狼,早就应该换SSD硬盘了!
- 移植uboot第二步:分析uboot
- c语言enum能自定义吗,18、C语言 —— 枚举enum
- mysql的复合类型_PLSQL 复合类型数据
- 需求:整个网站不能出现以下两个链接。思路:检索到网站中凡是出现该链接的都让它的href值为空...
- [转载]ArcMap中如何自制符号库(二)
- (转)搜索Maven仓库 获取 groupid artifactId