全裸的单点更新....

代码:

#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 敌兵布阵相关推荐

  1. hdu 1166 敌兵布阵(单点更新)

    hdu 1166 敌兵布阵(基本操作) 有三种操作:询问区间总和,增加某个兵营的兵的数目,减少某个兵营的兵的数目.实际上也只有两个. 在更新的时候,每到一个区间就把当前区间的sum增加对应的数目,到达 ...

  2. HDU 1166 敌兵布阵(线段树:点更新,区间求和)

    HDU 1166 敌兵布阵(线段树:点更新,区间求和) http://acm.hdu.edu.cn/showproblem.php?pid=1166 题意: 给你n个整数,然后给你多条命令,每条命令如 ...

  3. 树状数组板子题之一:hdu 1166 敌兵布阵

    树状数组板子题之一:hdu 1166 敌兵布阵 题目链接:hdu 1166 敌兵布阵 Problem Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手 ...

  4. hdu 1166 敌兵布阵 (线段树)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  5. HDU 1166 敌兵布阵

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  6. hdu 1166 敌兵布阵

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  7. 杭电1166敌兵布阵

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  8. hdu 1166 敌兵布阵(线段树之 单点更新+区间求和)

    敌兵布阵                                                                             Time Limit: 2000/10 ...

  9. hdu 1166 敌兵布阵 树状数组

    敌兵布阵                                                                           Time Limit: 2000/1000 ...

最新文章

  1. Openstack安装部署
  2. 设置网页打开默认全屏_提升Adsense收入的三个关键设置
  3. AI:2020年6月22日北京智源大会演讲分享之认知神经基础专题论坛——15:00-15:40刘嘉教授《From Representation to Comp: the Cognitive N》
  4. An internal error occurred during: Launching MVC on Tomcat 6.x.
  5. UGUI 自动布局的重叠BUG
  6. Python学习之路和隐藏特征
  7. CSS层叠样式选择器归纳
  8. 20171108 模拟题 T1
  9. 计算机代码如何使用方法,电脑定时自动关机代码怎么样使用
  10. Missing required icon file.Thebundle does not con
  11. SQL ALTER TABLE 语句在项目中的使用
  12. 我用Python写了一个做题软件控制台版。(支持Mod)
  13. 想学明白PostgreSQL,得先捋一捋体系架构
  14. java 实现回收站功能,回收站功能在 Linux 中的实现
  15. Prompt learning系列之入门篇
  16. Visual Studio 2012 安装包
  17. 信息安全知识竞赛试题
  18. 红米Android降级,红米Note 5(安卓9.0 不要降级刷低版本)纯净ROOT线刷包分享,一键救砖教程,轻松刷回官方系统,流畅如初!...
  19. 2021年芒种是几月几号?芒种习俗有哪些 ?
  20. Python 与金融科技5|批量抓取并保存上证50的交易数据

热门文章

  1. Windows 10第四个大补丸来啦
  2. Debain 安装ssh
  3. ubuntu设置字体编码GBK和UTF-8
  4. 舍不得孩子套不着狼,早就应该换SSD硬盘了!
  5. 移植uboot第二步:分析uboot
  6. c语言enum能自定义吗,18、C语言 —— 枚举enum
  7. mysql的复合类型_PLSQL 复合类型数据
  8. 需求:整个网站不能出现以下两个链接。思路:检索到网站中凡是出现该链接的都让它的href值为空...
  9. [转载]ArcMap中如何自制符号库(二)
  10. (转)搜索Maven仓库 获取 groupid artifactId