hdu 1754 线段树单点更新求最值
2018-04-10 21:29
232 查看
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #include<cstdlib> #include<queue> #define fo(i,a,b) for(int i=a;i<=b;i++) #define fod(i,a,b) for(int i=a;i>=b;i--) using namespace std; #define lc (x<<1) #define rc (x<<1|1) #define mid ((l+r)>>1) const int MAXN=2e5+10; int vi[MAXN],maxs[MAXN<<2]; void build(int x,int l,int r){ if(l==r){ maxs[x]=vi[l]; return ; } build(lc,l,mid); build(rc,mid+1,r); maxs[x]=max(maxs[rc],maxs[lc]); } void updata(int x,int l,int r,int pos,int val){ if(l==r){ maxs[x]=val; return ; } if(pos<=mid) updata(lc,l,mid,pos,val); else updata(rc,mid+1,r,pos,val); maxs[x]=max(maxs[lc],maxs[rc]); } void query(int x,int ql,int qr,int l,int r,int &ans){ if(ql<=l&&qr>=r){ ans=max(ans,maxs[x]); return ; } if(ql<=mid) query(lc,ql,qr,l,mid,ans); if(qr>mid) query(rc,ql,qr,mid+1,r,ans); } int n,m; int main(){ while(scanf("%d%d",&n,&m)!=EOF){ fo(i,1,n) scanf("%d",&vi[i]); build(1,1,n); char c; int a,b; fo(i,1,m){ cin>>c; scanf("%d%d",&a,&b); if(c=='Q'){ int ans=0; query(1,a,b,1,n,ans); printf("%d\n",ans); } if(c=='U'){ updata(1,1,n,a,b); } } } return 0; }
相关文章推荐
- hdu 1754 I Hate It 线段树单点更新区间查询
- hdu 1754:I Hate It(线段树 单点更新+区间最值)
- hdu 1754 线段树区间最大值 单点更新
- 【解题报告】 HDU 1754 I Hate It 线段树 单点更新
- hdu1754 I Hate It(线段树,单点更新,区间最值)
- kuangbin专题七 : B题 :HDU 1754 I Hate It(线段树单点更新区间查询最值)
- HDU 1754 I Hate It【线段树,区间最值,单点更新,结构体】
- hdu 1754线段树单点更新
- HDU 1754 线段树(单点更新)
- hdu 1754 I Hate It 线段树单点更新区间查询
- 线段树单点更新 hdu 1754 I Hate It
- hdu 1754 线段树区间最大值 单点更新
- hdu 1754 I Hate It(线段树单点更新求区间最大值)
- HDU 1754 I Hate It(线段树,单点更新,线段查询)
- 线段树单点更新 - HDU 1166 敌兵布阵 1754 I Hate it
- HDU—1754—I_Hate_It—【数据结构】【线段树】【单点更新】
- HDU 1754 I Hate It 线段树(单点更新,成段查询)
- HDU 1754 解题报告 线段树 单点更新
- hdu 1754 线段树区间最大值 单点更新
- hdu1754 简单的线段树单点更新