I Hate It (线段树点更新)

来源:互联网 发布:mac os 10.9 iso镜像 编辑:程序博客网 时间:2024/06/04 19:06

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

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

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 61 2 3 4 5Q 1 5U 3 6Q 3 4Q 4 5U 2 9Q 1 5
Sample Output
5659          
Hint
Huge input,the C function scanf() will work better than cin         
#include <iostream>#include <algorithm>#define MAX 200000+5#define STU 5000using namespace std;int segtree[MAX<<2];int score[MAX+5];void build(int node, int left, int right){if(left==right){segtree[node]=score[left];return;}int mid=(left+right)/2;build(node*2, left, mid);build(node*2+1, mid+1, right);segtree[node]=max(segtree[node*2], segtree[node*2+1]);}void revise(int node, int left, int right, int ind, int pri){if(ind<left||ind>right) return;if(left==right){segtree[node]=pri;return;}int mid=(left+right)/2;if(ind<=mid) revise(node*2, left, mid, ind, pri);else revise(node*2+1, mid+1, right, ind, pri);segtree[node]=max(segtree[node*2], segtree[node*2+1]);}int query(int node, int begin, int end, int left, int right){if(begin>right||end<left) return 0;if(begin<=left && end>=right) return segtree[node];int mid=(left+right)/2;if(begin>mid) return query(node*2+1, begin, end, mid+1, right);else if(end<=mid) return query(node*2, begin, end, left, mid);else return max(query(node*2, begin, end, left, mid), query(node*2+1, begin, end, mid+1, right));}int main(){int N, M;while(scanf("%d%d", &N, &M)!=EOF){for(int i=1; i<=N; i++)scanf("%d", &score[i]);build(1, 1, N);string op;int x, y;for(int i=1; i<=M; i++){cin >> op;if(op[0]=='Q'){scanf("%d%d", &x, &y);printf("%d\n", query(1, x, y, 1, N));}else{scanf("%d%d", &x, &y);revise(1, 1, N, x, y);}}}return 0;}






原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 天猫三天未发货怎么办 天猫申请换货卖家不处理怎么办 天猫新疆不发货怎么办 天猫商城少发货怎么办 下单了卖家不发货怎么办 天猫超市漏发货怎么办 天猫购物几天不发货怎么办 天猫总是不发货怎么办 申请退款后卖家又发货了怎么办 天猫拍后申请退款卖家发货怎么办 淘宝上没下单却收到了货怎么办 被买家投诉三无产品怎么办 阿里巴巴卖家虚假发货怎么办 淘宝捡到便宜但是卖家不发货怎么办 被工商局查到三无产品怎么办 淘宝买到三无产品电器怎么办 天猫商城被投诉怎么办 床板有虫子咬人怎么办 微信充电话费充错怎么办 联通话费充多了怎么办 qq钱包充值要验证码怎么办 在微信qq币充错账号怎么办 微信qq币充错了怎么办 魅蓝e玩游戏卡怎么办 魅蓝5玩游戏卡怎么办 微信qb充错号了怎么办 支付宝qb充错号了怎么办 手机上q币充错了怎么办 q币数值充错了怎么办 微信充值商户电话是假了怎么办 微信冲话费冲错了怎么办 淘宝退款不退邮费怎么办 淘金币买的退款怎么办 淘宝退款不退运费怎么办 拼多多不退运费怎么办 开发商不退团购服务费怎么办 支付宝话费充错了怎么办 电视版本低不支持投屏怎么办 绝地求生刺激战场不支持机型怎么办 手机不支持微信运动怎么办 淘宝虚拟商品买家退货退款怎么办