求调!!!!!!

P2572 [SCOI2010] 序列操作

fire_flower @ 2024-12-20 19:23:28

相似,打到最后样例3 1 6 5,

根本不知道哪里错了

在线等挺急的 QAQ

#include<bits/stdc++.h>
#define ls p<<1
#define rs p<<1|1
#define int long long
using namespace std;
const int N=1e5+10;
int n,m,a[N];
struct node{
    int l,r,b,lb,rb,mb,c,lc,rc,mc,len,tag,rev;
}e[N*4];
void pushup(node& p,node l,node r){
    p.b=l.b+r.b;
    p.lb=l.c?l.lb:l.b+r.lb;
    p.rb=r.c?r.rb:r.b+l.rb;
    p.mb=max(max(l.mb,r.mb),l.rb+r.lb);
    p.c=l.c+r.c;
    p.lc=l.b?l.lc:l.c+r.lc;
    p.rc=r.b?r.rc:r.c+l.rc;
    p.mc=max(max(l.mc,r.mc),l.rc+r.lc);
    return;
}
void pd(int p,int opt){
    node&t=e[p];
    if(!opt){
        t.b=t.lb=t.rb=t.mb=0;
        t.c=t.lc=t.rc=t.mc=t.len;
        t.tag=0;t.rev=0;
    }
    if(opt==1){
        t.b=t.lb=t.rb=t.mb=t.len;
        t.c=t.lc=t.rc=t.mc=0;
        t.tag=1;t.rev=0;
    }
    if(opt==2){
        swap(t.b,t.c);swap(t.lb,t.lc);
        swap(t.rb,t.rc);swap(t.mb,t.mc);
        t.rev^=1;
    }
    return;
}
void pushdown(int p){
    node& t=e[p];
    if(t.tag==0)pd(ls,0),pd(rs,0);
    else if(t.tag==1)pd(ls,1),pd(rs,1);
    else pd(ls,2),pd(rs,2);
    t.tag=-1;t.rev=0;
}
void build(int p,int l,int r){
    int t=a[l];
    e[p]={l,r,t,t,t,t,t^1,t^1,t^1,t^1,r-l+1,-1,0};
    if(l==r)return;
    int m=l+r>>1;
    build(ls,l,m);
    build(rs,m+1,r);
    pushup(e[p],e[ls],e[rs]);
    return;
}
void change(int p,int x,int y,int k){
    if(y<e[p].l||e[p].r<x)return;
    if(y>=e[p].r&&e[p].l>=x){
        pd(p,k);
        return;
    }
    pushdown(p);
    change(ls,x,y,k);
    change(rs,x,y,k);
    pushup(e[p],e[ls],e[rs]);
}
node query(int p,int x,int y){
    if(x>e[p].r||y<e[p].l )return {};
    if(x<=e[p].l&&e[p].r<=y)return e[p];
    pushdown(p);
    node T;
    pushup(T,query(ls,x,y),query(rs,x,y));
    return T;
}
signed main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)cin>>a[i];
    build(1,1,n);
    while(m--){
        int opt,l,r;
        cin>>opt>>l>>r;l++,r++;
        if(opt<3)change(1,l,r,opt);
        else{
            node t=query(1,l,r);
            cout<<(opt==3?t.b:t.mb)<<'\n';
        }
    }
    return 0;
} 

by fire_flower @ 2024-12-20 20:03:20

我恨else! A了...


by __Confringo__ @ 2024-12-21 08:15:33

@fire_flower 谨慎食用 else


by __Confringo__ @ 2024-12-21 08:16:00

@fire_flower 爱你


|