洛谷P1531 I Hate It
来源:互联网 发布:广告背景音乐制作软件 编辑:程序博客网 时间:2024/06/07 06:22
题目背景
很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。这让很多学生很反感。
题目描述
不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩
输入输出格式
输入格式:第一行,有两个正整数 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'的时候,表示这是一条更新操作,如果当前A学生的成绩低于B,则把ID为A的学生的成绩更改为B,否则不改动。
输出格式:对于每一次询问操作,在一行里面输出最高成绩
输入输出样例
输入样例#1:
5 61 2 3 4 5Q 1 5U 3 6Q 3 4Q 4 5U 2 9Q 1 5
输出样例#1:
5659
可以跑线段树。。。
附代码:
#include<iostream>#include<algorithm>#include<cstdio>#define LSON rt<<1#define RSON rt<<1|1#define DATA(x) a[x].data#define SIGN(x) a[x].c#define LSIDE(x) a[x].l#define RSIDE(x) a[x].r#define WIDTH(x) (RSIDE(x)-LSIDE(x)+1)#define MAXN 200010using namespace std;int n,m;struct node{ long long data,c; int l,r;}a[MAXN<<2];inline int read(){ int date=0,w=1;char c=0; while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();} while(c>='0'&&c<='9'){date=date*10+c-'0';c=getchar();} return date*w;}void pushup(int rt){ DATA(rt)=max(DATA(LSON),DATA(RSON));}void pushdown(int rt){ if(!SIGN(rt)||LSIDE(rt)==RSIDE(rt)) return; SIGN(LSON)=SIGN(rt); DATA(LSON)=max(SIGN(rt),DATA(rt)); SIGN(RSON)=SIGN(rt); DATA(RSON)=max(SIGN(rt),DATA(rt)); SIGN(rt)=0;}void buildtree(int l,int r,int rt){ int mid; LSIDE(rt)=l; RSIDE(rt)=r; if(l==r){ DATA(rt)=read(); return; } mid=l+r>>1; buildtree(l,mid,LSON); buildtree(mid+1,r,RSON); pushup(rt);}void update(int l,int r,long long c,int rt){ int mid; if(l<=LSIDE(rt)&&RSIDE(rt)<=r){ SIGN(rt)=c; DATA(rt)=max(DATA(rt),c); return; } pushdown(rt); mid=LSIDE(rt)+RSIDE(rt)>>1; if(l<=mid)update(l,r,c,LSON); if(mid<r)update(l,r,c,RSON); pushup(rt);}long long query(int l,int r,int rt){ int mid; long long ans=0; if(l<=LSIDE(rt)&&RSIDE(rt)<=r) return DATA(rt); pushdown(rt); mid=LSIDE(rt)+RSIDE(rt)>>1; if(l<=mid)ans=max(ans,query(l,r,LSON)); if(mid<r)ans=max(ans,query(l,r,RSON)); return ans;}int main(){ int x,y; char ch[2]; n=read();m=read(); buildtree(1,n,1); while(m--){ scanf("%s",ch);x=read();y=read(); if(ch[0]=='U')update(x,x,y,1); if(ch[0]=='Q')printf("%lld\n",query(x,y,1)); } return 0;}
阅读全文
0 0
- 【洛谷P1531】I Hate It
- 洛谷P1531 I Hate It
- 洛谷P1531 I Hate It
- 线段树 洛谷P1531 I Hate It
- 洛谷P1531 I Hate It(线段树)
- 线段树 洛谷 p1531 I hate it(I hate it too)
- P1531 I Hate It(线段树)
- P1531 I Hate It(最简单的线段树)
- I Hate It
- hdu1754 I Hate It
- HDU1754 I Hate It
- BIT1083 I Hate It
- HDU1754:I Hate It
- HDU1754--I Hate It
- HDU1754 I hate it
- I Hate It tzc
- hdu_1754 I Hate It
- hdu1754 I Hate It
- java File类,文件过滤器
- jsp基础
- skynet 学习笔记
- 数据结构与算法分析——带有头结点的单链表的实现(C语言)
- 人工智能简述
- 洛谷P1531 I Hate It
- caffe中的L2 Normalization原理以及推导
- ubuntu14.04 安装 mysql-workbench 6.2.5教程
- Python的yield
- JavaMail SMTP(递送邮件机制)
- 使用numpy复制拓展数据
- 网易有道2017内推编程题
- javaWeb中一些最好(必须)嵌套的标签,干货
- hadoop的mapreduce运行在yarn上的原理