kuangbin专题七 HDU1754 I Hate It (单点修改维护最大值)

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

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

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

在每个测试的第一行,有两个正整数 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。

Output对于每一次询问操作,在一行里面输出最高成绩。Sample 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

Sample Output

5
6
5
9
经过两道题的磨练,终于可以手搓了!细节需要注意一下
 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <math.h>
 4 #include <string.h>
 5 #include <stdlib.h>
 6 #include <string>
 7 #include <vector>
 8 #include <set>
 9 #include <map>
10 #include <queue>
11 #include <algorithm>
12 #include <sstream>
13 #include <stack>
14 using namespace std;
15 #define FO freopen("in.txt","r",stdin);
16 #define rep(i,a,n) for (int i=a;i<n;i++)
17 #define per(i,a,n) for (int i=n-1;i>=a;i--)
18 #define pb push_back
19 #define mp make_pair
20 #define all(x) (x).begin(),(x).end()
21 #define fi first
22 #define se second
23 #define SZ(x) ((int)(x).size())
24 #define debug(x) cout << "&&" << x << "&&" << endl;
25 #define lowbit(x) (x&-x)
26 #define mem(a,b) memset(a, b, sizeof(a));
27 typedef vector<int> VI;
28 typedef long long ll;
29 typedef pair<int,int> PII;
30 const ll mod=1000000007;
31 const int inf = 0x3f3f3f3f;
32 ll powmod(ll a,ll b) {ll res=1;a%=mod;for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;}
33 ll gcd(ll a,ll b) { return b?gcd(b,a%b):a;}
34 //head
35
36 const int N=200010;
37 int n,m,a[N<<2],maxx[N<<2],pos,val,ans;
38
39 void Pushup(int rt) {
40     maxx[rt]=max(maxx[rt<<1],maxx[rt<<1|1]);
41 }
42
43 void build(int rt,int L,int R) {
44     if(L==R) {
45         scanf("%d",&a[L]);//这里必须是L
46         maxx[rt]=a[L];//这里是rt的维护信息
47         return;
48     }
49     int mid=(L+R)>>1;
50     build(rt<<1,L,mid);
51     build(rt<<1|1,mid+1,R);
52     Pushup(rt);
53 }
54
55 void Updata(int rt,int L,int R,int pos,int val) {
56     if(L==R) {//修改
57         a[rt]=val;
58         maxx[rt]=a[rt];
59         return;
60     }
61     int mid=(L+R)>>1;
62     if(pos<=mid) Updata(rt<<1,L,mid,pos,val);
63     else Updata(rt<<1|1,mid+1,R,pos,val);
64     Pushup(rt);
65 }
66
67 void Query(int rt,int L,int R,int l,int r) {//维护最大值
68     if(L>=l&&R<=r) {
69         ans=max(ans,maxx[rt]);
70         return;
71     }
72     int mid=(L+R)>>1;
73     if(l<=mid) Query(rt<<1,L,mid,l,r);
74     if(r>mid) Query(rt<<1|1,mid+1,R,l,r);
75 }
76
77 int main() {
78     while(~scanf("%d%d",&n,&m)) {
79         build(1,1,n);
80         char s[5];
81         while(m--) {
82             ans=-1;
83             scanf("%s%d%d",s,&pos,&val);
84             if(s[0]==‘Q‘) {
85                 Query(1,1,n,pos,val);
86                 printf("%d\n",ans);
87             } else Updata(1,1,n,pos,val);
88         }
89     }
90 }


原文地址:https://www.cnblogs.com/ACMerszl/p/9822294.html

时间: 2024-10-12 08:43:57

kuangbin专题七 HDU1754 I Hate It (单点修改维护最大值)的相关文章

kuangbin专题七 HDU1540 Tunnel Warfare (前缀后缀线段树)

During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast areas of north China Plain. Generally speaking, villages connected by tunnels lay in a line. Except the two at the ends, every village was directly con

kuangbin专题七、线段树

题意:线段树,单点更新,区间查询 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<cmath> 5 using namespace std; 6 7 const int maxn=5e4+5; 8 int sum[maxn*4]; //sum求和,开四倍空间 9 int num[maxn]; //存原数组下标[1,n] 10 11 //up更新节点信息,这里是求和

kuangbin专题七 HDU1698 Just a Hook (set线段树)

In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of the heroes. The hook is made up of several consecutive metallic sticks which are of the same length. Now Pudge wants to do some operations on the hook. Let us numb

【算法系列学习】线段树vs树状数组 单点修改,区间查询 [kuangbin带你飞]专题七 线段树 A - 敌兵布阵

https://vjudge.net/contest/66989#problem/A 单点修改,区间查询 方法一:线段树 http://www.cnblogs.com/kuangbin/archive/2011/08/15/2139834.html 1 #include<iostream> 2 #include<cstdio> 3 #include<string> 4 #include<cstring> 5 #include<cmath> 6 #

[kuangbin带你飞]专题七 线段树

A - 敌兵布阵 HDU - 1166 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视. 中央情报局要研究敌人究竟演习什么战术,所以Tidy要随时向Derek汇报某一段连续的工兵营地一共有多少

开发指南专题七:JEECG微云快速开发平台查询HQL过滤器

开始学习wxWidgets,上一篇写了"安装wxWidgets遭遇的两大关卡"(简称"前文"). 先推荐一下这两天找到的学习材料. 博客中有一个系列教程,貌似作者没有写完,见<跟我学wxWidgets开发>系列教程. 要看书,就<使用wxWidgets进行跨平台程序开发>.我给的链接中,包括中书中的源码.这本书,是<Cross Platform GUI Programming With wxWidget>的中译本,译本中没有附录部

kuangbin专题四 : 最短路 I 题 Arbitrage

kuangbin专题四 : 最短路 I 题  Arbitrage POJ 2240 Arbitrage is the use of discrepancies in currency exchange rates to transform one unit of a currency into more than one unit of the same currency. For example, suppose that 1 US Dollar buys 0.5 British pound,

kuangbin专题专题四 Til the Cows Come Home POJ - 2387

题目链接:https://vjudge.net/problem/POJ-2387 题意:从编号为n的城市到编号为1的城市的最短路. 思路:dijkstra模板题,直接套板子,代码中我会带点注释给初学者看. 1 #include <iostream> 2 #include <cstring> 3 #include <algorithm> 4 #include <cstdio> 5 #include <string> 6 using namespac

【kuangbin专题】计算几何基础(极角相关)

[POJ 1696] Space Ants [题目大意] 给定多个点,对他们按照下面的规则排序,每个都在前一个点组成的左边,并且连线不相交(典型如图) [题目分析] 不断进行极角排序,不断选取一定区域内最符合要求的解 [代码] 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #define ll double 5 using namespace std; 6 const double eps