P1531 I Hate It(最简单的线段树)

来源:互联网 发布:阿里大数据平台 编辑:程序博客网 时间:2024/06/05 20:58

题目在这呢QAQ
这个垃圾题目我tmd调了一节课

#include <cstdio>#include <iostream>#include <string>using namespace std;const int MAXN=200001;int a[MAXN],st[(MAXN)<<2],q[5001];void build(int o,int l,int r){    if(l==r) st[o]=a[l];    else    {        int m=l+((r-l)>>1);        build(o<<1,l,m);        build((o<<1)+1,m+1,r);        st[o]=max(st[(o<<1)],st[(o<<1)+1]);    }}void update(int o,int l,int r,int ind,int ans){    if(l==r)    {        st[o]=ans;        return;    }    int m=l+((r-l)>>1);    if(ind<=m)    {        update((o<<1),l,m,ind,ans);    }    else    {        update((o<<1)+1,m+1,r,ind,ans);    }    st[o]=max(st[(o<<1)],st[(o<<1)+1]);}int query(int o,int l,int r,int ql,int qr){    if(ql>r||qr<l) return -1;    if(ql<=l&&qr>=r) return st[o];    int m=l+((r-l)>>1);    int p1=query((o<<1),l,m,ql,qr);    int p2=query((o<<1)+1,m+1,r,ql,qr);    return max(p1,p2);}int main(){    //freopen("a.in","r",stdin);    //freopen("a.out","w",stdout);    int i,n,m,j,t=0;    string c1;    scanf("%d%d",&n,&m);    for(i=1;i<=n;i++)     scanf("%d",&a[i]);    build(1,1,n);    for(i=1;i<=m;i++)     {         int b,c;        //c1=getchar();        cin>>c1;        scanf("%d%d",&b,&c);         if(c1=="Q") printf("%d\n",query(1,1,n,b,c));        if(c1=="U")           {            if(a[b]<c) a[b]=c,update(1,1,n,b,c);//如果大就变化         }     }     //fclose(stdin);    //fclose(stdout);     return 0;}

1:换行符读入卡了我好半天,cin忽略换行符(cin大法好);
2:又一次不读题。

0 0