站外题求助
  • 板块题目总版
  • 楼主Damon77
  • 当前回复1
  • 已保存回复1
  • 发布时间2025/8/3 18:05
  • 上次更新2025/8/3 22:00:54
查看原帖
站外题求助
981592
Damon77楼主2025/8/3 18:05

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;
}

2025/8/3 18:05
加载中...