珂朵莉树 0分求助
  • 板块P5350 序列
  • 楼主FWRP
  • 当前回复6
  • 已保存回复6
  • 发布时间2022/6/18 16:49
  • 上次更新2023/10/27 23:04:46
查看原帖
珂朵莉树 0分求助
669363
FWRP楼主2022/6/18 16:49
#include<bits/stdc++.h>
#define int long long
#define fep(i,l,r) for(int i=l;i<=r;i++)
#define defep(i,r,l) for(int i=r;i>=l;i--)
#define fst first
#define scd second
#define all(x) begin(x),end(x)
#define lowbit(x) ((x)&(-x))
#define pb(a) push_back(a)
#define sqt(x) (int)(floor(sqrt((long double) x + 1e-16)) )
#define sqr(x) ((x)*(x))
#define Chtholly(x) ios::sync_with_stdio(x)
//吾日三省吾身:你清多测了吗?你数组开够了吗?你访问越界了吗?
using namespace std;
const int N=3e5+123;
const int mod=1e9+7;

struct Chtholly{
    mutable int l,r,v;
    bool operator < (Chtholly p)const{
        return l<p.l;
    };
};
set<Chtholly>s;

int n,m;

auto split(int x){
    auto it=s.lower_bound({x,0,0});
    if(it!=s.end()&&it->l==x) return it;
    int l=(--it)->l,r=it->r,v=it->v;
    return s.erase(it),s.insert({l,x-1,v}),s.insert({x,r,v}).fst;
}

void assign(int l,int r,int t){
    auto itr=split(r+1),itl=split(l);
    s.erase(itl,itr),s.insert({l,r,t});
    return ;
}

signed main(){
    Chtholly(0);
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        int x;cin>>x;s.insert({i,i,x});
    }
    for(int i=1;i<=m;i++){
        int op,l,r;
        cin>>op>>l>>r;
        if(op==1){
            int sum=0;
            auto itr=split(r+1),itl=split(l);
            for(auto it=itl;it!=itr;it++)
                (sum+=it->v*(it->r-it->l+1))%=mod;
            cout<<sum<<endl;
        }
        if(op==2){
            int x;cin>>x;
            assign(l,r,x);
        }
        if(op==3){
            int x;cin>>x;
            auto itr=split(r+1),itl=split(l);
            for(auto it=itl;it!=itr;it++)
                (it->v+=x)%=mod;
        }
        if(op==4){
            int lx,rx;
            cin>>lx>>rx;
            auto ir2=split(rx+1),il2=split(lx);
            auto ir1=split(r+1),il1=split(l);
            vector<Chtholly>v;
            for(auto it=il1;it!=ir1;it++)
                v.push_back({it->l+(lx-l),it->r+(rx-r),it->v});
            s.erase(il2,ir2);
            for(auto now:v)
                s.insert(now);
        }
        if(op==5){
            int lx,rx;
            cin>>lx>>rx;
            auto ir2=split(rx+1),il2=split(lx);
            auto ir1=split(r+1),il1=split(l);
            vector<Chtholly>v1,v2;
            for(auto it=il1;it!=ir1;it++)   
                v1.push_back({it->l+(lx-l),it->r+(rx-r),it->v});
            for(auto it=il2;it!=ir2;it++)
                v2.push_back({it->l+(l-lx),it->r+(r-rx),it->v});
            s.erase(il1,ir1),s.erase(il2,ir2);
            for(auto now:v1)
                s.insert(now);
            for(auto now:v2)
                s.insert(now);
        }
        if(op==6){
            vector<Chtholly>v;
            auto itr=split(r+1),itl=split(l);
            for(auto it=itl;it!=itr;it++)
                v.push_back({it->l,it->r,it->v});
            s.erase(itl,itr);
            int bas=0;
            reverse(all(v));
            for(auto now:v){
                s.insert({l+bas,l+(now.r-now.l)+bas,now.v});
                bas+=(now.r-now.l+1);
            }
        }
        // for(auto now:s){
        //     cout<<now.l<<" "<<now.r<<" "<<now.v<<endl;
        //     // for(int i=now.l;i<=now.r;i++)
        //         // cout<<now.v<<" ";
        // }
        // cout<<endl;
    }
    for(auto now:s){
        for(int i=now.l;i<=now.r;i++)
            cout<<now.v<<" ";
    }
    return 0;
}
*/

submission

2022/6/18 16:49
加载中...