新人妹子刚学OI,求解珂朵莉树0.0

P2572 [SCOI2010] 序列操作

IRipple @ 2019-02-17 15:14:26

以为拿ODT很容易过啊orz

判断连续一那个函数改用题解里的还是全WA。。。用了讨论版里的数据生成器对拍好长时间都么得结果QAQ

我跪了,有没有大爷救救孩子orz

#include<bits/stdc++.h>
#include<set>
#define IT set<node>::iterator
using namespace std;
int n,m;
struct node{
    int ll,rr;
    mutable int val;
    node(int l,int r=-1,int v=0):ll(l),rr(r),val(v) {} 
    bool operator < (const node &orz)const{
        return ll<orz.ll;
    } 
}; 
set<node> s;
IT split(int pos){
    IT it=s.lower_bound(node(pos));
    if(it!=s.end() && it->ll==pos) return it;
    --it;
    int ll=it->ll,rr=it->rr,val=it->val;
    s.erase(it);
    s.insert(node(ll,pos-1,val));
    return s.insert(node(pos,rr,val)).first;
}
void assign(int ll,int rr,int val){
    IT itr=split(rr+1),itl=split(ll);
    s.erase(itl,itr);
    s.insert(node(ll,rr,val));
} 
int qsum(int ll,int rr){
    int res=0;
    IT itr=split(rr+1),itl=split(ll);
    for(;itl!=itr;++itl) res+=(itl->rr-itl->ll+1)*itl->val;
    return res;
}
void rev(int ll,int rr)
{
    IT itr=split(rr+1),itl=split(ll);
    for(;itl!=itr; ++itl)
        (itl->val) ^= 1;
} 
int  cnt(int ll,int rr){
    IT itr=split(rr+1),itl=split(ll);
    int t,ans=0;
    for(;itl!=itr; ++itl){
        if(itl->val==false){
            ans=max(ans,t); 
            t=0;
        }
        else {
            t+=(itl->rr-itl->ll+1);
        }
    }
    return max(ans,t);
} 
int main(){
    //freopen("data.txt","r",stdin);
    //freopen("my.txt","w",stdout);
    cin>>n>>m;
    int v;
    for(int i=0;i<n;i++){
        scanf("%d",&v);
        s.insert(node(i,i,v));
    }
    s.insert(node(n,n,0));
    while(m--){
        int opt,a,b;
        scanf("%d %d %d",&opt,&a,&b);
        if(opt==0){
            assign(a,b,0);
        }
        if(opt==1){
            assign(a,b,1);
        }
        if(opt==2){
            rev(a,b);
        } 
        if(opt==3){
            cout<<qsum(a,b)<<endl;
        }
        if(opt==4){
            cout<<cnt(a,b)<<endl;
        }
    }

    return 0;
}

by 良辰、 @ 2019-02-17 15:16:33

刚学OI就A紫题qaq 关键还是妹子
强的很
表示根本不知道珂朵莉树(逃


by VenusM1nT @ 2019-02-17 15:17:55

这不是珂朵莉树的 SB 题吗


by IRipple @ 2019-02-17 15:20:51

@Venus 和题解对拍半天都没结果orz我能怎么办我也很无奈啊


by VenusM1nT @ 2019-02-17 15:21:13

@靛涟 推荐使用瞪眼法


by CHENRUIJIE @ 2019-02-17 15:26:17

好多人都说自己是蜜汁,结果都不是


|