博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDOJ 1166 敌兵布阵
阅读量:6069 次
发布时间:2019-06-20

本文共 1097 字,大约阅读时间需要 3 分钟。

全裸的单点更新....

代码:

#include
#include
#include
using namespace std;#define MAXN 50002struct 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<= mid if(a[e].mid

转载于:https://www.cnblogs.com/tclh123/archive/2011/09/19/2587063.html

你可能感兴趣的文章
【HDOJ】3553 Just a String
查看>>
Java 集合深入理解(7):ArrayList
查看>>
2019年春季学期第四周作业
查看>>
linux环境配置
查看>>
ASP.NET MVC中从前台页面视图(View)传递数据到后台控制器(Controller)方式
查看>>
lintcode:next permutation下一个排列
查看>>
python 递归
查看>>
一个想法(续二):换个角度思考如何解决IT企业招聘难的问题!
查看>>
tomcat指定配置文件路径方法
查看>>
VS没办法调试,直接退出,报错:1. 使用调试生成配置或禁用调试选项“启用‘仅我的代码’”。。。...
查看>>
linux下查看各硬件型号
查看>>
对象合成复用之策略模式
查看>>
【Vue】VS Code+Vue入门 Helloworld
查看>>
org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'PUT' not supported
查看>>
遇到过的面试题
查看>>
caffe修改需要的东西
查看>>
微信小程序 - 提取字体图标与其优化
查看>>
amazeui学习笔记二(进阶开发5)--Web 组件开发规范Rules
查看>>
java 标准输出与标准错误 out与 err 区别 用法 联系 java中的out与err区别 System.out和System.err的区别 System.out.println和Sy...
查看>>
读取 classes下的配置文件
查看>>