萌新ODT RE求助QAQ

P5350 序列

```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


|