HDU 1166 敌兵布阵(线段树基础)
来源:互联网 发布:知乎 全友家居 编辑:程序博客网 时间:2024/05/16 05:18
中文体面...考察线段树基本操作单点更新,区间查询...因为手边没有以前用的模板,然后就自己写了一个,估计写的比较挫....
PS:并差集和剩下的最短路四道题好难的样子...然后就来到了线段树...
#include<cstdio>#include<cstring>#include<cmath>#include<cstdlib>#include<algorithm>#include<iostream>#include<queue>#include<stack>using namespace std;struct node{ int l,r,x;} data[300000];void build(int l,int r,int k){ data[k].l=l; data[k].r=r; if(l==r) { int x; scanf("%d",&x); data[k].x=x; return ; } int mid=(l+r)>>1; build(l,mid,k*2); build(mid+1,r,k*2+1); data[k].x=data[k*2].x+data[k*2+1].x;}void add(int c,int k,int x){ if(data[k].l==c&&data[k].l==data[k].r) { data[k].x+=x; return ; } if(c<data[k].l||c>data[k].r) return ; add(c,k*2,x); add(c,k*2+1,x); data[k].x=data[k*2].x+data[k*2+1].x;}int query(int l,int r,int k){ if(data[k].l==l&&data[k].r==r) return data[k].x; if(data[k].l>r||data[k].r<l) return 0; int mid=(data[k].r+data[k].l)>>1; if(r<=mid) return query(l,r,k*2); else if(l>=mid+1) return query(l,r,k*2+1); else return query(l,mid,k*2)+query(mid+1,r,k*2+1);}int main(){ int T,n; scanf("%d",&T); for(int cas=1; cas<=T; cas++) { scanf("%d",&n); build(1,n,1); char s[300]; printf("Case %d:\n",cas); while(scanf("%s",s),s[0]!='E') { int x,y; scanf("%d %d",&x,&y); if(s[0]=='A') add(x,1,y); else if(s[0]=='S') add(x,1,-y); else if(s[0]=='Q') printf("%d\n",query(x,y,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 敌兵布阵(线段树)
- 数据结构上机实验之二分查找
- XML 转义字符
- 如何使用Cocos2d-x 3.0制作基于tilemap的游戏:第一部分
- Linux安装xwindow图形界面
- ubuntu中安装apache ab命令进行简单压力测试
- HDU 1166 敌兵布阵(线段树基础)
- coledispatchdriver
- JS和boostrap在MVC下实现分页
- 同余式定理
- Android 学习中需要用到的知识
- keepalived配置文件详解
- module_init的加载和释放
- 小鑫与小伙伴
- linux下vnc的安装