当前位置: 代码迷 >> 综合 >> HDU 1754 I Hate It(线段树:单点set,区间max)
  详细解决方案

HDU 1754 I Hate It(线段树:单点set,区间max)

热度:2   发布时间:2024-01-22 02:00:24.0

题意:

 

 

C'Q'的时候,表示这是一条询问操作,它询问IDAB(包括A,B)的学生当中,成绩最高的是多少。
C'U'的时候,表示这是一条更新操作,要求把IDA的学生的成绩更改为B

 

题解:

      线段树模板题:单点set,区间max

 

 

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<queue>
#include<string>
#include<cstring>
#include<vector>
#include<functional>
#include<utility>
#include<set>
#include<map>
#include<cmath>
#include<cctype>
#define INF 0x3f3f3f3fusing namespace std;#define lson i*2,l,m
#define rson 2*i+1,m+1,rconst int maxn=200000+10;int maxv[maxn<<2];void pushup(int i)
{maxv[i]=max(maxv[2*i],maxv[2*i+1]);
}void build(int i,int l,int r)
{if(l==r){scanf("%d",&maxv[i]);return;}int m=(l+r)/2;build(lson);build(rson);pushup(i);
}int query(int ql,int qr,int i,int l,int r)
{if(ql<=l&&qr>=r)return maxv[i];int max_val=-INF;int m=(l+r)/2;if(ql<=m)max_val=max(max_val,query(ql,qr,lson));if(m<qr)max_val=max(max_val,query(ql,qr,rson));return max_val;
}void update(int id, int val, int i, int l, int r)
{if(l==r){maxv[i]=val;return;}int m=(l+r)/2;if(id<=m)update(id,val,lson);else update(id,val,rson);pushup(i);
}int main()
{int n,m;while(cin>>n>>m){build(1,1,n);while(m--){char s[20];int u,v;scanf("%s%d%d",s,&u,&v);if(s[0]=='Q')cout<<query(u,v,1,1,n)<<endl;else update(u,v,1,1,n);}}}