```cpp
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define It set <Chotholly>::iterator
const ll N=3*114514,M=1919810,mod=1e9+7;
ll n,m,a[N];
struct Chotholly{
ll l,r;
mutable ll v;
bool operator <(const Chotholly &x) const{
return l<x.l;
}
};
set <Chotholly> s;
It split(ll now){
It it=s.lower_bound((Chotholly){now,0,0});
if(it!=s.end()&&it->l==now) return it;
--it;
if(it->r < now) return s.end();
ll l=it->l,r=it->r,v=it->v;
s.erase(it);
s.insert((Chotholly){l,now-1,v});
return s.insert((Chotholly){now,r,v}).first;
}
void assign(ll l,ll r,ll x){
It itr=split(r+1),itl=split(l);
s.erase(itl,itr);
s.insert((Chotholly){l,r,x});
}
void update(ll l,ll r,ll x){
It itr=split(r+1),itl=split(l);
for(It it=itl;it!=itr;++it) it->v +=x,it->v %=mod;
}
ll query_sum(ll l,ll r){
It itr=split(r+1),itl=split(l);
ll ans=0;
for(It it=itl;it!=itr;++it) ans+=(it->v)*(it->r - it->l +1),ans%=mod;
return ans%mod;
}
Chotholly w[N],v[N];
void copy(ll l,ll r,ll l2,ll r2){
It itr1=split(r+1),itl1=split(l);
ll len=0;
for(It it=itl1;it!=itr1;++it)
w[++len].l=it->l,w[len].r=it->r,w[len].v=it->v;
It itr2=split(r2+1),itl2=split(l2);
s.erase(itl2,itr2);
for(int i=1;i<=len;++i)
s.insert((Chotholly){w[i].l-l+l2,w[i].r-l+l2,w[i].v});
for(int i=1;i<=len;++i) w[i].l=w[i].r=w[i].v=0;
}
void change(ll l,ll r,ll l2,ll r2){
It itr1=split(r+1),itl1=split(l);
ll lenw=0;
for(It it=itl1;it!=itr1;++it)
w[++lenw].l=it->l,w[lenw].r=it->r,w[lenw].v=it->v;
s.erase(itl1,itr1);
It itr2=split(r2+1),itl2=split(l2);
ll lenv=0;
for(It it=itl2;it!=itr2;++it)
v[++lenv].l=it->l,v[lenv].r=it->r,v[lenv].v=it->v;
//cout<<"QWQ"<<'\n';
s.erase(itl2,itr2);
for(int i=1;i<=lenv;++i)
s.insert((Chotholly){v[i].l-l2+l,v[i].r-l2+l,v[i].v});
for(int i=1;i<=lenw;++i)
s.insert((Chotholly){w[i].l-l+l2,w[i].r-l+l2,w[i].v});
for(int i=1;i<=lenw;++i) w[i].l=w[i].r=w[i].v=0;
for(int i=1;i<=lenv;++i) v[i].l=v[i].r=v[i].v=0;
}
void reverse(ll l,ll r){
It itr=split(r+1),itl=split(l);
ll len=0;
for(It it=itl;it!=itr;++it)
w[++len].l=it->l,w[len].r=it->r,w[len].v=it->v;
s.erase(itl,itr);
for(int i=1;i<=len;++i)
s.insert((Chotholly){r-w[i].r+l,r-w[i].l+l,w[i].v});
for(int i=1;i<=len;++i) w[i].l=w[i].r=w[i].v=0;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;++i) cin>>a[i],s.insert((Chotholly){i,i,a[i]});
for(int i=1;i<=m;++i){
ll opt,l,r,l2,r2,k;
cin>>opt>>l>>r;
if(opt==2||opt==3) cin>>k;
if(opt==4||opt==5) cin>>l2>>r2;
if(l>r) swap(l,r);
if(l2>r2) swap(l2,r2); //什么凉心出题人啊
if(opt==1) cout<<query_sum(l,r)<<'\n';
if(opt==2) assign(l,r,k);
if(opt==3) update(l,r,k);
if(opt==4) copy(l,r,l2,r2);
if(opt==5) change(l,r,l2,r2);
if(opt==6) reverse(l,r);
}
for(It it=s.begin();it!=s.end()&&it->r <= n;++it)
for(int i=it->l;i<=it->r;++i)
cout<<it->v<<' ';
return 0;
}
```
by mzycの喰种 @ 2023-08-02 19:57:43
~~去你的萌新~~
第一个可能是 STL 用错了,然后 STL 里面的 `assert` 爆出来了。
by ATZdhjeb @ 2023-08-02 20:00:02
@[ATZdhjeb](/user/483317) 我的it哪里越界了吗QWQ
by mzycの喰种 @ 2023-08-02 20:00:59
@[mzycの喰种](/user/526677) 不知道,没仔细看,~~但是 chtholly 打错了~~
by ATZdhjeb @ 2023-08-02 20:03:31
@[ATZdhjeb](/user/483317) 算了,数据结构就是拿来调的![](//图.tk/0)
by mzycの喰种 @ 2023-08-02 20:03:50
@[ATZdhjeb](/user/483317) 屮
by mzycの喰种 @ 2023-08-02 20:04:07
~~绝对是这个原因~~
by mzycの喰种 @ 2023-08-02 20:05:41