HDU1754-线段树(点更新区间查询)-I Hate It
2017-08-14 12:58
399 查看
https://vjudge.net/problem/HDU-1754
注意,1每次更新的时候要维护最大值
2 查询有三种情况。每种只能进行一个
注意,1每次更新的时候要维护最大值
2 查询有三种情况。每种只能进行一个
#include <bits/stdc++.h> using namespace std; const int maxn=200006; struct Node{ int l,r; int v;//极值 }node[maxn*4]; int a[maxn]; void build(int num,int lef,int rig){ node[num].l=lef;//赋值。 node[num].r=rig;//赋值 if(lef==rig){ node[num].v=a[lef]; return ; } int mid=(lef+rig)/2; build(num<<1,lef,mid);//生成左子树 build(num<<1|1,mid+1,rig);//生成右子树 node[num].v=max(node[num<<1].v,node[num<<1|1].v);//极值 } void update(int num,int pos,int gg){ //点更新,写成node一样吧 int lef=node[num].l; int rig=node[num].r; if(lef==pos&&rig==pos){ node[num].v=gg; return ; } int mid=(lef+rig)/2; if(mid>=pos) update(num<<1,pos,gg); else update(num<<1|1,pos,gg);//更新右节点。 node[num].v=max(node[num<<1].v,node[num<<1|1].v); } int query(int num,int le,int re){ int lef=node[num].l; int rig=node[num].r; if(le==lef&&re==rig){ return node[num].v; } //cout<<num<<endl; int mid=(lef+rig)/2; int all=-1; if(mid>=re){//左区间完全包含。 all=max(all,query(num<<1,le,re)); } else if(mid<le){//右区间完全包含 all=max(all,query(num<<1|1,le,re)); } else//在其中找最大值 { all=max(query(num<<1,le,mid),query(num<<1|1,mid+1,re)); } return all; } int main() { int m,n; char c; int a1,b1; while(~scanf("%d%d",&m,&n)){ for(int i=1;i<=m;i++){ scanf("%d",&a[i]); } build(1,1,m); for(int i=0;i<n;i++){ cin>>c; scanf("%d%d",&a1,&b1); if(c=='U'){ update(1,a1,b1); } else if(c=='Q'){ printf("%d\n",query(1,a1,b1)); } } } return 0; }
相关文章推荐
- HDU 1754 I Hate It(线段树单点更新区间最值查询)
- HDU 1754 I hate it(线段树。单点更新, 区间查询)
- HDU - 1754 I Hate It(简单线段树 单点更新+区间查询)
- kuangbin专题七 : B题 :HDU 1754 I Hate It(线段树单点更新区间查询最值)
- HDU1754 I Hate It(线段树基础题单节点更新区间查询)
- HDU - 1754 I Hate It (线段树 单点更新区间查询)
- HDU-1754 I Hate It (线段树 入门题 点修改 区间查询)
- hdu1754 I Hate It(线段树,单点更新,区间最值)
- HDU 1754 I Hate It(线段树:单点更新,求区间最大值)
- HDU 1754 I Hate It(线段树之单点更新,区间最值)
- hdu1754 I Hate It(线段树点的更新和区间查找)
- hdu 1754 I Hate It(线段树单点更新求区间最大值)
- 【线段树I:点修改+区间查询】hdu 1754 I Hate It
- hdu 1754 I Hate It(线段树,单点更新,区间最值)
- (HDU 1754)I Hate It 线段树区间查询入门,单点修改
- hdu 1754 I Hate It(线段树之 单点更新+区间最值)
- HDU 1754 I Hate It(简单线段树-单点更新,区间询问)
- HDU 1754-I Hate It(线段树:单点更新,区间最值)
- 模板(线段树 + 树状数组 + 单点查询 + 区间查询)eg:HDU 1754 - I Hate It
- hdu 1754 I Hate It(线段树单点更新(a位置的值变成b)+区间求最值)