蒟蒻初学线段树,舅舅海子吧QAQ
  • 板块P1531 I Hate It
  • 楼主像晚风
  • 当前回复4
  • 已保存回复4
  • 发布时间2021/8/2 16:41
  • 上次更新2023/11/4 12:13:30
查看原帖
蒟蒻初学线段树,舅舅海子吧QAQ
418900
像晚风楼主2021/8/2 16:41
#include<bits/stdc++.h>
using namespace std;
const int inf=1e6+5;
#define INF 0x7f7f7f7f
#define ll long long
ll v;
int n,l,r,w,m,f,a[inf*2];
struct node{
    int l,r;
    ll pre,lazy;
#define l(x) t[x].l
#define r(x) t[x].r
#define m(x) t[x].pre
#define lazy(x) t[x].lazy
#define ls p<<1
#define rs ls|1
}t[inf*4];
char ch;
void push_up(int p) {
    m(p)=max(m(ls),m(rs));
}

void build(int p,int l,int r) {
    l(p)=l,r(p)=r;
    if(l==r) {
        m(p)=a[l];
        return ;
    }
    int mid=l+r>>1;
    build(ls,l,mid);
    build(rs,mid+1,r);
    push_up(p);
}

void spread(int p) {
    if(!lazy(p)) return ;
    m(ls)+=lazy(p);
    m(rs)+=lazy(p);
    lazy(ls)+=lazy(p);
    lazy(rs)+=lazy(p);
    lazy(p)=0;
}

void change(int p,int l,int r,ll x) {
    if(l(p)>r||r(p)<l) return ;
    if(l(p)==l&&r(p)==r) {
        m(p)=max(x,m(p));
        //lazy(p)+=x;
        return ;
    }
   // spread(p);
    change(ls,l,r,x);
    change(rs,l,r,x);
    push_up(p);
}

ll ask(int p,int l,int r) {
    if(l(p)==l&&r(p)==r) return m(p);
    if(l(p)>r||r(p)<l) return m(p);
  //  spread(p);
    return max(ask(ls,l,r),ask(rs,l,r));
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    build(1,1,n);
    for(int i=1;i<=m;i++)
    {
        char p;
        int l,r,k;
        cin>>p>>l>>r;
        if(p=='U')
            change(1,l,l,r);
        else
            cout<<ask(1,l,r)<<endl;

    }
    return 0;
}
2021/8/2 16:41
加载中...