线段树实现
来源:互联网 发布:淘宝商家佣金怎么算 编辑:程序博客网 时间:2024/06/06 01:15
#include <iostream>#include <cstring>using namespace std;struct tree{int l;int r;int sum; } t[140000]; int people[50010],SUM=0; void make(int x,int y,int num) { t[num].l=x; t[num].r=y; if(x==y) t[num].sum=x; else { make(x,(x+y)/2,num*2); make((x+y)/2+1,y,num*2+1); t[num].sum=t[num*2].sum+t[num*2+1].sum; } } void add(int i,int j,int num)//第i个堡垒加j个飞船 { t[num].sum+=j; if(t[num].l==i&&t[num].r==i) return; if(i>(t[num].l+t[num].r)/2) add(i,j,num*2+1); else add(i,j,num*2); } void sub(int i,int j,int num)//第i个堡垒减j个飞船 { t[num].sum-=j; if(t[num].l==i&&t[num].r==i)return; if(i>(t[num].l+t[num].r)/2) sub(i,j,num*2+1); else sub(i,j,num*2); } void query(int i,int j,int num) { if(i<=t[num].l&&j>=t[num].r) SUM+=t[num].sum; else { int min=(t[num].l+t[num].r)/2; if(i>min) query(i,j,num*2+1); else if(j<=min) query(i,j,num*2); else { query(i,j,num*2); query(i,j,num*2+1); } } } int main() { int n,t,i,j; char command[6]; cin>>t; j=0; while(t--) { int temp,a,b; cin>>n; people[0]=0; for(i=1;i<=n;i++) cin>>people[i]; make(1,n,1);//从 根节点t[1]开始 cout<<"Case "<<++j<<":"<<endl; while(cin>>command) { if(strcmp(command,"End")==0) break; else if(strcmp(command,"Query")==0) { cin>>a>>b; SUM=0;//初始为零 query(a,b,1);//从 根节点t[1]开始 cout<<SUM<<endl; } else if(strcmp(command,"Add")==0) { cin>>a>>b; add(a,b,1);//从 根节点t[1]开始 } else if(strcmp(command,"Sub")==0) { cin>>a>>b; sub(a,b,1);//从 根节点t[1]开始 } } } return 0; }
0 0
- 线段树的实现
- 线段树实现
- 线段树简单实现
- RMQ(线段树实现)
- 线段树的基本实现
- hdu 2689 线段树实现
- java代码实现线段树
- 线段树的实现(模板)
- 线段树一个漂亮的实现
- 线段树的简化实现(转)
- 线段树思想实现矩形切割
- hdu-4217-线段树-链式存储实现
- 线段树的实现求解格子操作
- 线段树java实现,包括单点更新。
- 169_线段树实现RMQ
- POJ2777线段树(结构体指针实现)
- hihocoder 1077 线段树 java实现
- 线段树-代码实现细节与技巧
- 【Leetcode】101. Symmetric Tree
- 写给2017年
- 【求助】微信公众平台“查看历史消息”页面如何做到按日全部显示出来呢?请高手赐教!谢谢
- python按行读取文件 去掉换行符"\n" (查眼力,比较文档的不同)
- 有关使用Provisioning Profile遇到的问题
- 线段树实现
- 建立通讯录的程序(用字典)
- 为什么一个简单的网页程序,打开后一直在刷新???
- 刚学Android求大神解答下 ListView分页加载的问题
- Celery源码分析(四)--------Blueprint各组件start流程
- vfork和exit简单介绍
- Hello World 2017
- 54. Spiral Matrix
- 二叉树操作 C++实现