线段树 单点更新
来源:互联网 发布:mac子弹头色号 编辑:程序博客网 时间:2024/05/26 08:42
题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=1166
//线段树 单点更新
#include <cstdio>
#include <algorithm>
using namespace std;
#define N 50010
int segtree[N*4+10];
int in[N];
void build_tree(int root, int l, int r){
if (l==r){
segtree[root] = in[l];
}else{
int mid = (l+r)>>1;
build_tree(root*2,l,mid);
build_tree(root*2+1,mid+1,r);
segtree[root] = segtree[root*2] + segtree[root*2+1];
}
}
int query_tree(int root , int l , int r, int ll, int rr){
// printf("l=%d r=%d %d\n",l,r,segtree[root]);
if (l>rr || r< ll)
return -1;
if (l>=ll&&r<=rr){
return segtree[root];
}
int mid = (l+r)>>1;
int p1 =query_tree(root*2,l,mid,ll,rr);
int p2= query_tree(root*2+1,mid+1,r,ll,rr);
if (p1==-1)
return p2;
if (p2==-1)
return p1;
return p1+p2;
}
int update_tree(int root,int l ,int r , int pos , int v){
if (pos<l || pos> r)
return 1;
if (l==r){
segtree[root]+=v;
}else{
int mid = (l+r)>>1;
if (pos<=mid)
update_tree(root*2,l,mid,pos,v);
else
update_tree(root*2+1,mid+1,r,pos,v);
segtree[root] = segtree[root*2]+segtree[root*2+1];
}
}
int main (){
int n;
int t ;
scanf("%d",&t);
for (int i = 1 ; i <= t ; i++){
printf("Case %d:\n",i);
scanf("%d",&n);
for (int j = 1 ; j <= n ; j++){
scanf("%d",&in[j]);
}
build_tree(1,1,n);
char s[10];
int a,b;
for (;;){
scanf("%s",s);
if (s[0]=='Q'){
scanf("%d%d",&a,&b);
printf("%d\n",query_tree(1,1,n,a,b));
}else if(s[0] == 'A'){
scanf("%d%d",&a,&b);
update_tree(1,1,n,a,b);
}else if (s[0] == 'S'){
scanf("%d%d",&a,&b);
update_tree(1,1,n,a,-b);
}else{
break;
}
}
}
return 0;
}
- 线段树 单点更新
- 线段树单点更新
- 线段树 单点更新
- 单点更新线段树
- 线段树单点更新
- 线段树单点更新
- 线段树 单点更新
- 线段树 单点更新
- 线段树单点更新
- 线段树 单点更新
- 单点更新线段树
- 线段树单点更新
- 线段树,单点更新
- hdu4267 线段树单点更新
- 线段树_单点更新
- hdu2795 线段树单点更新
- poj2828 线段树单点更新
- poj2828----线段树--------单点更新
- leetcode.51. N-Queens
- 接口
- 面向对象设计原则
- Codeforces Round #354 (Div. 2) D
- 最长回文子串(Longest Palindromic Substring)
- 线段树 单点更新
- Youtube上下载的Caffe安装视频教程
- 动态规划——scramble-string
- Ubuntu 下完全卸载软件
- 阅读郭林《第一行代码》的笔记——第4章 手机平板要兼顾,探究碎片
- SQL
- IOS 多线程技术
- 线性表--数组描述(封装类)
- oralce横表转纵表示例