uoj218 样例全过 0分,大样例测不了
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ls p<<1
#define rs p<<1|1
#define pb push_back
const ll N=5e5+10;
const ll M=2e3+10;
const ll inf=1e12;
const ll mod=1e9+7;
inline ll lowbit(ll x){
return x&(-x);
}
ll n,m,ty;
stack<ll> st[N],kst[N];
ll kl[N],kr[N],sm[N];
ll siz,num;
inline void init(){
siz=sqrt(n);
num=n/siz;
if(siz*num!=n) num++;
for(int i=1;i<=num;i++){
kl[i]=(i-1)*siz+1;
kr[i]=i*siz;
}
}
inline void add(ll l,ll r,ll x){
ll bl=(l-1)/siz+1;
ll br=(r-1)/siz+1;
if(bl==br){
stack<ll> kstl;
while(!kst[bl].empty()){
kstl.push(kst[bl].top());
kst[bl].pop();
}
while(!kstl.empty()){
for(int i=kl[bl];i<=kr[bl];i++){
st[i].push(kstl.top());
}
kstl.pop();
}
for(int i=l;i<=r;i++){
if(!st[i].empty()) sm[bl]-=st[i].top();
st[i].push(x);
sm[bl]+=x;
}
return ;
}
stack<ll> kstl;
while(!kst[bl].empty()){
kstl.push(kst[bl].top());
kst[bl].pop();
}
while(!kstl.empty()){
for(int i=kl[bl];i<=kr[bl];i++){
st[i].push(kstl.top());
}
kstl.pop();
}
for(int i=l;i<=kr[bl];i++){
if(!st[i].empty()) sm[bl]-=st[i].top();
st[i].push(x);
sm[bl]+=x;
}
stack<ll> kstr;
while(!kst[br].empty()){
kstr.push(kst[br].top());
kst[br].pop();
}
while(!kstr.empty()){
for(int i=kl[br];i<=kr[br];i++){
st[i].push(kstr.top());
}
kstr.pop();
}
for(int i=kl[br];i<=r;i++){
if(!st[i].empty()) sm[br]-=st[i].top();
st[i].push(x);
sm[br]+=x;
}
for(int i=bl+1;i<br;i++){
kst[i].push(x);
sm[i]=x*siz;
}
}
inline void del(ll x){
ll bx=(x-1)/siz+1;
stack<ll> kstx;
while(!kst[bx].empty()){
kstx.push(kst[bx].top());
kst[bx].pop();
}
while(!kstx.empty()){
for(int i=kl[bx];i<=kr[bx];i++){
st[i].push(kstx.top());
}
kstx.pop();
}
if(!st[x].empty()) sm[bx]-=st[x].top();
if(!st[x].empty()) st[x].pop();
if(!st[x].empty()) sm[bx]+=st[x].top();
}
ll ans;
inline ll qu(ll l,ll r){
ll bl=(l-1)/siz+1;
ll br=(r-1)/siz+1;
ll res=0;
if(bl==br){
if(!kst[bl].empty()) res+=(r-l+1)*kst[bl].top();
else {
for(int i=l;i<=r;i++){
if(!st[i].empty()) res+=st[i].top();
}
}
return res;
}
if(!kst[bl].empty()) res+=(kr[bl]-l+1)*kst[bl].top();
else {
for(int i=l;i<=kr[bl];i++){
if(!st[i].empty()) res+=st[i].top();
}
}
if(!kst[br].empty()) res+=(r-kl[br]+1)*kst[br].top();
else {
for(int i=kl[br];i<=r;i++){
if(!st[i].empty()) res+=st[i].top();
}
}
for(int i=bl+1;i<br;i++){
res+=sm[i];
}
return res;
}
int main(){
// freopen("T4_4.in","r",stdin);
// freopen("T4.out","w",stdout);
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n>>m>>ty;
init();
while(m--){
ll op,l,r,x;
cin>>op;
if(op==1){
cin>>l>>r;
l=(l+ans*ty)%n+1;
r=(r+ans*ty)%n+1;
if(l>r) swap(l,r);
ans=qu(l,r);
cout<<ans<<"\n";
}
else if(op==2){
l=(l+ans*ty)%n+1;
cin>>l;
del(l);
}
else{
cin>>l>>r>>x;
l=(l+ans*ty)%n+1;
r=(r+ans*ty)%n+1;
if(l>r) swap(l,r);
add(l,r,x);
}
}
// fclose(stdin);
// fclose(stdout);
return 0;
}