线段树之HDU 1166 敌兵布阵
2016-03-08 02:38
302 查看
题目:HDU 1166 敌兵布阵
线段树模板题
这是本渣第一道线段树的题,表示对移位运算符的优先级非常不满
线段树模板题
//Must so #include<bits/stdc++.h> #define mem(a,x) memset(a,x,sizeof(a)) #define sqrt(n) sqrt((double)n) #define pow(a,b) pow((double)a,(int)b) #define inf 1<<29 #define NN 50004 using namespace std; const double PI = acos(-1.0); typedef long long LL; struct Node { int l,r,v; }q[4*NN]; void buildtree(int i,int l,int r) { q[i].l = l,q[i].r = r; if (l == r) { scanf("%d",&q[i].v); return ; } int mid = (l+r)/2; buildtree(i<<1,l,mid); buildtree((i<<1)+1,mid+1,r); q[i].v = q[i<<1].v + q[(i<<1)+1].v; } void Add(int i,int a,int b) { if (q[i].l == q[i].r &&q[i].l == a) { q[i].v += b; return ; } int mid = (q[i].l+q[i].r)/2; if (a <= mid) Add(i<<1,a,b); else Add((i<<1)+1,a,b); q[i].v += b; } int query(int i,int l,int r) { if (l == q[i].l&&r == q[i].r) { return q[i].v; } int mid = (q[i].l+q[i].r)/2; if (r <= mid) return query(i<<1,l,r); else if (l > mid) return query((i<<1)+1,l,r); else return query(i<<1,l,mid)+query((i<<1)+1,mid+1,r); } int main() { int T; scanf("%d",&T); int kas = 1; while (T--) { printf("Case %d:\n",kas++); int n; scanf("%d",&n); buildtree(1,1,n); string s; while (cin>>s) { if (s == "End") break; int a,b; scanf("%d%d",&a,&b); if (s == "Query") { printf("%d\n",query(1,a,b)); } else if (s == "Add") { Add(1,a,b); } else { Add(1,a,-b); } } } return 0; }
这是本渣第一道线段树的题,表示对移位运算符的优先级非常不满
相关文章推荐
- 高精度计算
- Emacs录制宏
- 指示器(菊花效果)代码演示--iOS开发
- 阶乘计算
- rrdtool的完整例子
- rrdtool的完整例子
- 在CentOS上部署开源博客系统Blog_mini
- 在CentOS上部署开源博客系统Blog_mini 推荐
- Myeclipse+Tomcat运行网站
- 线段树之HDU 1754 I hate it
- 字母图形
- CocoaPods安装和使用教程
- PyQt5 - QWidgets部件进阶教程之计算器
- 杨辉三角
- JavaScript--闭包
- 特殊的数字
- 【C#进阶系列】06 类型和成员基础
- spark将计算结果写入到hdfs的两种方法
- 【C#进阶系列】06 类型和成员基础
- 关于layer.photos即照片显示的问题。