1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| #include<iostream> #include<algorithm> using namespace std; int seg[400040]; void modify(int i,int v,int L,int R,int idx) { if(L==R) seg[idx]=v; else { int mid=(L+R)/2; if(i<=mid) modify(i,v,L,mid,idx*2); else modify(i,v,mid+1,R,idx*2+1); seg[idx]=max(seg[idx*2],seg[idx*2+1]); } } int query(int l,int r,int L,int R,int idx) { if(l==L&&r==R) return seg[idx]; else { int mid=(L+R)/2; if(r<=mid) return query(l,r,L,mid,idx*2); else if(l>mid) return query(l,r,mid+1,R,idx*2+1); else return max( query(l,mid,L,mid,idx*2), query(mid+1,r,mid+1,R,idx*2+1) ); } } int main() { ios::sync_with_stdio(0); cin.tie(0); int n,q; cin>>n>>q; for(int i=0;i<n;i++) { int t; cin>>t; modify(i,t,0,n-1,1); } while(q--) { int type,a,b; cin>>type>>a>>b; if(type==1) { a--; modify(a,b,0,n-1,1); } else { a--; b--; cout<<query(a,b,0,n-1,1)<<endl; } } }
|