题解:AT_abc413_c [ABC413C] Large Queue
bravo11111111 · · 题解
解题思路:
这道题一共有两个操作:
1 往队列尾加
2 删除队列前
对于操作 1 ,我们只需要记两个数组,分别记下
对于操作 2 ,我们可以用一个变量
AC代码:
#include<bits/stdc++.h>
#define int unsigned long long
using namespace std;
int q,a[1000001],cnt,st,sum[200001],kua[200001],num[200001];//这边其实2个就行了
signed main() {
cin>>q;
while(q--) {
int op,x,y;
cin>>op>>x;
if(op==1) {
cin>>y;
kua[++cnt]=y;
num[cnt]=x;
sum[cnt]=x*y;
} else {
int i=st+1;
int ans=0;
for(i=st+1; x>=num[i]&&i<=cnt; i++)ans+=sum[i],x-=num[i];
st=i-1;
if(i<=cnt){
num[i]-=x;
sum[i]=num[i]*kua[i];
ans=ans+x*kua[i];
}
cout<<ans<<"\n";
}
}
return 0;
}