85pts求调,悬关
查看原帖
85pts求调,悬关
371848
吴思诚楼主2023/10/20 11:03
// Problem: P9588 「MXOI Round 2」队列
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P9588
// Memory Limit: 512 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<iostream>
#include<set>
#define int long long
using namespace std;
#define Ed for(int i=h[x];~i;i=ne[i])
#define Ls(i,l,r) for(int i=l;i<r;++i)
#define Rs(i,l,r) for(int i=l;i>r;--i)
#define Le(i,l,r) for(int i=l;i<=r;++i)
#define Re(i,l,r) for(int i=l;i>=r;--i)
#define L(i,l) for(int i=0;i<l;++i)
#define E(i,l) for(int i=1;i<=l;++i)
#define W(t) while(t--)
#define Wh while
#define x first
#define y second
#define elif else if
const int N=200010;
int c,Q,cur,l=1;
typedef pair<int,int> pii;
pii q[N];
typedef long long ll;
ll sum[N],delta;
multiset<int>s;
signed main(){
    // freopen("queue3.in","r",stdin);
    // freopen("queue3.out","w",stdout);
    #ifdef ONLINE_JUDGE
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    #endif
    cin>>c>>Q;
    E(i, Q){
        int op;
        cin>>op;
        if(op==1){
            int x;
            cin>>x;
            q[++cur]={1,x};
            // printf("insert:%d %d\n",1,x);
            sum[cur]=sum[cur-1]+x;
            // printf("sum is %d\n",sum[cur]);
            s.insert(x);
        }
        elif(op==2){
            int y,sub;
            cin>>y;
            Wh(y&&y>=(sub=q[l].y-q[l].x+1))/*printf("remove:%d %d\n",q[l].x,q[l].y),*/y-=sub,s.erase(q[l++].y),delta+=sub;
            if(l<=cur)/*printf("from (%d,%d) to (%d,%d)\n",q[l].x,q[l].y,q[l].x+y,q[l].y),*/q[l].x+=y,delta+=y;
        }
        elif(op==3){
            ll z;
            cin>>z;
            // printf("delta=%d\n",delta);
            z+=delta;
            // printf("query %d\n",z);
            int pos=lower_bound(sum+1,sum+cur+1,z)-sum;
            z-=sum[pos-1];
            // printf("pos is %d,z=%d\n",pos,z);
            cout<<z<<'\n';
            // printf("sum[1]=%d\n",sum[1]);
        }
        else
            cout<<*(s.rbegin())<<'\n';
    }
    return 0;
}
2023/10/20 11:03
加载中...