瓶颈似乎在操作2和3
这能过就离谱,不会算时间复杂度
#include<bits/stdc++.h>
using namespace std;
struct node{
int x,len;
bool operator< (const node &A)const{
return x<A.x;
}
}block[200005];
int lb;
int head,tail;
struct qus{
int opt,x;
}ask[200005];
int c,q;
priority_queue<node> que;
int main(){
// freopen("queue5.in","r",stdin);
// freopen("queue5.out","w",stdout);
scanf("%d%d",&c,&q);
for(int i=1;i<=q;i++){
scanf("%d",&ask[i].opt);
if(ask[i].opt<4)scanf("%d",&ask[i].x);
if(ask[i].opt==1){
++lb;
block[lb].x=ask[i].x;
block[lb].len=ask[i].x;
}
}
for(int i=1;i<=q;i++){
if(ask[i].opt==1){
tail++;
que.push({block[tail].x,tail});
}
if(ask[i].opt==2){
while(ask[i].x>=block[head].len){
ask[i].x-=block[head++].len;
}
block[head].len-=ask[i].x;
}
if(ask[i].opt==3){
int head2=head;
while(ask[i].x>block[head2].len){
ask[i].x-=block[head2++].len;
}
printf("%d\n",block[head2].x-block[head2].len+ask[i].x);
}
if(ask[i].opt==4){
while(que.top().len<head)que.pop();
printf("%d\n",que.top().x);
}
}
return 0;
}