HDU 1754 I Hate It(线段树单点更新)
2017-01-18 16:46
302 查看
#include<iostream> #include<algorithm> using namespace std; const int maxn=800000+5; int n,m,a[maxn/4]; struct Intervaltree{ int maxx[maxn]; void clear() {memset(maxx,0,sizeof(maxx));} void build(int o,int L,int R) { if(L==R){ maxx[o]=a[L]; return ; } build(o*2+1,L,(L+R)/2); build(o*2+2,(L+R)/2+1,R); maxx[o]=max(maxx[o*2+1],maxx[o*2+2]); } void update(int o,int p,int L,int R,int v) { if(L==R){ maxx[o]=v; return ; } int mid=(L+R)/2; if(p<=mid) update(o*2+1,p,L,mid,v); else update(o*2+2,p,mid+1,R,v); maxx[o]=max(maxx[o*2+1],maxx[o*2+2]); } int query(int o,int l,int r,int L,int R) { int v=0; if(L<=l&&R>=r) return maxx[o]; int mid=(l+r)/2; if(R<=mid) v=max(v,query(o*2+1,l,mid,L,R)); else if(L>mid) v=max(v,query(o*2+2,mid+1,r,L,R)); else v=max(v,max(query(o*2+1,l,mid,L,R),query(o*2+2,mid+1,r,L,R))); return v; } }; Intervaltree Interval; int main() { while(~scanf("%d%d",&n,&m)){ for(int i=1;i<=n;i++) scanf("%d",&a[i]); Interval.clear(); Interval.build(0,1,n); char cmd[10]; while(m--) { scanf("%s",cmd); int a,b; scanf("%d%d",&a,&b); if(cmd[0]=='Q'){ printf("%d\n",Interval.query(0,1,n,a,b)); } else{ Interval.update(0,a,1,n,b); } } } return 0; }
相关文章推荐
- hdu 1754 I Hate It (线段树 单点更新)
- hdu 1754 I Hate It 线段树 单点更新
- HDU 1754-I Hate It(线段树:单点更新,区间最值)
- HDU1754_I Hate It(线段树/单点更新)
- HDU1754 I Hate It(线段树单点更新)
- hdu 1754 I Hate It(线段树单点更新(a位置的值变成b)+区间求最值)
- HDU 1754 I Hate It(线段树单点更新区间最值查询)
- hdu1754 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
- HDU 1754 I Hate It(线段树 单点更新 区间最大值)
- HDU 1754 I Hate It(简单线段树-单点更新,区间询问)
- hdu 1754 I Hate It(线段树入门-单点更新)
- HDU 1754 I Hate It (线段树单点更新求最大值RMQ)
- 【解题报告】 HDU 1754 I Hate It 线段树 单点更新
- HDU 1754 I Hate It(线段树,单点更新)
- HDU 1754 I Hate It(线段树,单点更新,线段查询)