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

题目在这呢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:又一次不读题。

转载于:https://www.cnblogs.com/ht008/p/6819854.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值