线段树单点更新 区间求和,求最值
来源:互联网 发布:中国9月经济数据 编辑:程序博客网 时间:2024/05/16 09:52
#include <iostream>#include <string.h>#include <algorithm>#include <stdio.h>#include <math.h>#include <queue>#define MAXN 100010#define inf 0x3f3f3f3fusing namespace std;struct node{ int l,r;//区间[l,r] int sum;//区间和 int mx; //区间最大值 int mn; //区间最小值}tree[MAXN<<2];//一定要开到4倍多的空间void pushup(int index){ tree[index].sum = tree[index<<1].sum+tree[index<<1|1].sum; tree[index].mx = max(tree[index<<1].mx,tree[index<<1|1].mx); tree[index].mn = min(tree[index<<1].mn,tree[index<<1|1].mn);}void build(int l,int r,int index){ tree[index].l = l; tree[index].r = r; if(l == r){ scanf("%d",&tree[index].sum); tree[index].mn = tree[index].mx = tree[index].sum; return ; } int mid = (l+r)>>1; build(l,mid,index<<1); build(mid+1,r,index<<1|1); pushup(index);}void updata(int k,int index,int val){ if(tree[index].l == tree[index].r){ tree[index].sum = val;//把原来的值替换成val //tree[index].sum += val;//在原来的值上加上val tree[index].mn = tree[index].mx = tree[index].sum; return ; } int mid = (tree[index].l+tree[index].r)>>1; if(k <= mid){ updata(k,index<<1,val); } else{ updata(k,index<<1|1,val); } pushup(index);}int query(int l,int r,int index){ if(l <= tree[index].l && r >= tree[index].r){ return tree[index].sum; //return tree[index].mx; //return tree[index].mn; } int mid = (tree[index].l+tree[index].r)>>1; int ans = 0; int Max = 0; int Min = inf; if(l <= mid){ ans += query(l,r,index<<1); Max = max(query(l,r,index<<1),Max); Min = min(query(l,r,index<<1),Min); } if(r > mid){ ans += query(l,r,index<<1|1); Max = max(query(l,r,index<<1|1),Max); Min = min(query(l,r,index<<1|1),Min); } return ans; //return Max; //return Min;}int main(){ int n,m,q,x,y,z; while(~scanf("%d%d",&n,&m)){ build(1,n,1); while(m--){ scanf("%d",&q); if(q == 1){ scanf("%d %d",&x,&y); cout<<query(x,y,1)<<endl; } else{ scanf("%d %d",&x,&z); updata(x,1,z); } } } return 0;}
0 0
- 线段树单点更新 区间求和,求最值
- 线段树(单点更新,区间求和)
- poj2352Stars【线段树单点更新区间求和】
- leetCode_线段树、单点更新、区间求和
- HDU1166 线段树区间求和,单点更新
- 线段树总结(单点更新,区间更新,区间求和,区间求最值)
- 线段树经典操作模板(单点更新,替换;区间更新,替换;区间求和求最值)
- 线段树经典操作模板(单点更新,替换;区间更新,替换;区间求和求最值)
- 线段树 hdu 1166 敌兵布阵 单点更新区间求和
- hdu1394——线段树(单点更新 区间求和)
- 线段树 的单点更新和区间求和
- hdu 4046 Panda (线段树,单点更新,区间求和)
- HDU 1166 线段树的单点更新 区间求和
- HDU 3874 Necklace(线段树啊 单点更新 区间求和)
- hdu 1166 敌兵布阵【线段树】单点更新,区间求和
- hdu 1166 线段树单点更新和区间求和
- hdu1166 敌兵布阵 线段树单点更新+区间求和
- hdu 1166 线段树(单点更新,区间求和)
- poj 2105 大数
- Hdu 3001 Travelling 状态DP
- 郑大校赛-NYOJ-201-作业题(动态规划)
- 与HotSpot虚拟机对象有关的问题
- Maven那点事儿(Eclipse版)
- 线段树单点更新 区间求和,求最值
- hdu5726 GCD 多校1
- 网易实习生笔试题:二叉树
- SOC_SINGLE(xname, reg, shift, max, invert) 参数测试
- (1) redis windows安装
- HDU5724 Chess
- 134. Gas Station
- 如何判断对象是否“存活”
- JVM中的垃圾收集算法