【HDU 1166】【模板】敌兵布阵
来源:互联网 发布:国际顶级域名证书 编辑:程序博客网 时间:2024/05/16 07:18
感觉自己以前写的那个线段树并不是特别漂亮
或者说
又臭又长(手动@减维)
于是
改进一波代码风格
稍微飘逸一点
就看这个最简单的单点修改求区间和吧
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1const int maxn=55555;int sum[maxn<<2];void Pushup(int rt){ sum[rt]=sum[rt<<1]+sum[rt<<1|1];}void Build(int l,int r,int rt){ if(l==r) {scanf("%d",&sum[rt]);return;} int m=(l+r)>>1; Build(lson); Build(rson); Pushup(rt);}void Update(int p,int add,int l,int r,int rt){ if(l==r) {sum[rt]+=add;return;} int m=(l+r)>>1; if(p<=m) Update(p,add,lson); else Update(p,add,rson); Pushup(rt);}int Query(int L,int R,int l,int r,int rt){ if(L<=l&&r<=R) return sum[rt]; int m=(l+r)>>1; int ret=0; if(L<=m) ret+=Query(L,R,lson); if(R>m) ret+=Query(L,R,rson); return ret;}int main(){ int T,n; scanf("%d",&T); for(int cas=1;cas<=T;cas++) { printf("Case %d:\n",cas); scanf("%d",&n); Build(1,n,1); char op[10]; while(scanf("%s",&op)) { if(op[0]=='E') break; int aa,bb; scanf("%d%d",&aa,&bb); if(op[0]=='Q') printf("%d\n",Query(aa,bb,1,n,1)); else if(op[0]=='S') Update(aa,-bb,1,n,1); else Update(aa,bb,1,n,1); } } return 0;}
阅读全文
0 0
- 【HDU 1166】【模板】敌兵布阵
- hdu 1166 敌兵布阵 单点更新模板
- HDU 1166 敌兵布阵(树状数组模板)
- HDU 1166 敌兵布阵 树状数组模板
- hdu 1166 敌兵布阵 线段树模板
- HDU 1166 敌兵布阵
- HDU 1166 敌兵布阵
- hdu 1166 敌兵布阵
- hdu 1166 敌兵布阵
- HDU 1166 敌兵布阵
- hdu 1166 敌兵布阵
- hdu 1166 敌兵布阵
- hdu 1166敌兵布阵
- hdu 1166 敌兵布阵
- hdu 1166 敌兵布阵
- HDU 1166 敌兵布阵
- hdu 1166 敌兵布阵
- hdu 1166 敌兵布阵
- Unity3D在不同父子关系里获取方法的不同
- 分支的创建与管理
- 老板喜欢提拔什么样的员工
- Java初遇线程池
- 安卓轻松实现清理缓存
- 【HDU 1166】【模板】敌兵布阵
- Android常用的颜色列表——color.xml
- EasyCMS在幼儿园视频直播项目实战中以redis操作池的方式应对高并发的redis操作问题
- [vijos 1659]: 河蟹王国
- Python——进程、线程
- 《摔跤吧,爸爸》观后感
- PHP 设计模式
- 设计模式—代理模式(四)
- dubbo-Admin JDK1.8 启动报错