I hate it (最值单点修改区间查询)
发布日期:2021-07-14 01:03:47 浏览次数:88 分类:技术文章

本文共 1945 字,大约阅读时间需要 6 分钟。

传送门

描述

很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。

这让很多学生很反感。
不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。

输入

本题目包含多组测试,请处理到文件结束。

在每个测试的第一行,有两个正整数 N 和 M ( 0<N<=200000,0<M<5000 ),分别代表学生的数目和操作的数目。
学生ID编号分别从1编到N。
第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩。
接下来有M行。每一行有一个字符 C (只取’Q’或’U’) ,和两个正整数A,B。
当C为’Q’的时候,表示这是一条询问操作,它询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少。
当C为’U’的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。

输出

对于每一次询问操作,在一行里面输出最高成绩。

样例

  • Input
    5 6
    1 2 3 4 5
    Q 1 5
    U 3 6
    Q 3 4
    Q 4 5
    U 2 9
    Q 1 5
  • Output
    5
    6
    5
    9

思路

  • 最值单点修改区间查询

Code

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
#include
#include
#include
#define LL long long #define INIT(a,b) memset(a,b,sizeof(a)) using namespace std; struct Tree{
int num,l,r; }tree[1000007]; void build(int l,int r,int d){
tree[d]=(Tree){
-1000,l,r}; if(l==r)return ; int mid=(tree[d].l+tree[d].r)/2; build(l,mid,d<<1); build(mid+1,r,d<<1|1); } void update(int a,int b,int d){
if(tree[d].l==tree[d].r){
tree[d].num=b; return; } int mid=(tree[d].l+tree[d].r)/2; if(a<=mid) update(a,b,d<<1); else update(a,b,d<<1|1); tree[d].num=max(tree[d<<1].num,tree[d<<1|1].num); } int find(int l,int r,int d){
if(tree[d].l==l&&tree[d].r==r) return tree[d].num; int mid=(tree[d].l+tree[d].r)/2; if(r<=mid) return find(l,r,d<<1); else if(l>mid) return find(l,r,d<<1|1); else return max(find(l,mid,d<<1),find(mid+1,r,d<<1|1)); } int main(){
int n,m,tem; while(~scanf("%d %d",&n,&m)){
build(1,n,1); for(int i=1;i<=n;i++){
scanf("%d",&tem); update(i,tem,1); } char s[5]; int x,y; while(m--){
scanf("%s",s); scanf("%d %d",&x,&y); if(s[0]=='Q') printf("%lld\n",find(x,y,1)); else update(x,y,1); } } return 0; }

转载地址:https://blog.csdn.net/cpongo3/article/details/89334318 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:没有上司的舞会
下一篇:石子合并

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年03月29日 05时44分49秒