HDU 1754 I Hate It

来源:互联网 发布:如何提高淘宝店铺权重 编辑:程序博客网 时间:2024/06/13 22:41

Problem Description

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

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

Input

本题目包含多组测试,请处理到文件结束。
在每个测试的第一行,有两个正整数 N 和 M ( 0

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

线段树 模板
单点修改和区间最大值

不知为啥,洛谷Ac后,hdu超时…….欢迎神犇指教
莫非洛谷数据弱….

代码

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define lch now<<1#define rch now<<1|1#define MAXN 200000using namespace std;int tree[MAXN*2],a[MAXN];int n,t;inline void read(int&x) {    x=0;char c=getchar();    while(c>'9'||c<'0') c=getchar();    while(c>='0'&&c<='9') x=10*x+c-48,c=getchar(); } inline int in() {    char s=getchar();    while(s>'Z'||s<'A') s=getchar();    return s;}inline void build(int now,int l,int r) {    if(l==r) {        tree[now]=a[l];        return;    }    int mid=(l+r)>>1;    build(lch,l,mid);    build(rch,mid+1,r);    tree[now]=max(tree[lch],tree[rch]);}inline void morify(int now,int l,int r,int x,int val) {    if(l==r) {        if(tree[now]<val)//这如果更新值比原有的值小,则不更新                         //坑死人          tree[now]=val;        return;    }    int mid=(l+r)>>1;    if(x<=mid) morify(lch,l,mid,x,val);    else if(x>mid) morify(rch,mid+1,r,x,val);    tree[now]=max(tree[lch],tree[rch]);}inline int query(int now,int l,int r,int x,int y) {    if(l==x&&r==y) {        return tree[now];    }    int mid=(l+r)>>1;    if(x>mid) return query(rch,mid+1,r,x,y);    else if(y<=mid) return query(lch,l,mid,x,y);    else return max(query(lch,l,mid,x,mid),query(rch,mid+1,r,mid+1,y));}int hh() {    read(n);read(t);    for(int i=1;i<=n;i++) read(a[i]);    char s;    int x,y;    build(1,1,n);    for(int i=1;i<=t;i++) {        s=in();        if(s=='Q') {            read(x);read(y);            int ans=query(1,1,n,x,y);            printf("%d\n",ans);        }        if(s=='U') {            read(x);read(y);            morify(1,1,n,x,y);        }    }     return 0;}int hhh=hh();int main() {;}
0 0