不是保证了出队列操作一定有 c 个数吗,为什么需要特判 id<=t
#include<bits/stdc++.h>
#define ll long long
#define F(i,j,n) for(int i=j;i<=n;i++)
#define Tr(v,e) for(int v:e)
#define D double
#define ps push_back
#define Test ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
using namespace std;
const int N=1e6+10,NN=1e4+10;
ll n,m,k,x,y,u,v,w,cnt=0,ans=0,t=0,l=1,r,id=1,len,T,num;
ll mini=INT_MAX,maxi=0,p=998244353;
string s1,s2;
ll opt;
struct Node{
ll sum,x;
}a[N];
int main(){
cin>>n;
F(i,1,n){
cin>>opt;
if(opt==1){
t++;
cin>>a[t].x>>a[t].sum;
}
else{
ans=0;
cin>>cnt;
while(cnt>=a[id].sum&&id<=t){//特判
cnt-=a[id].sum;
ans+=a[id].sum*a[id].x;
id++;
}
ans+=cnt*a[id].x;
a[id].sum-=cnt;
cout<<ans<<"\n";
}
}
return 0;
}