专栏文章
题解:AT_abc413_c [ABC413C] Large Queue
AT_abc413_c题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mioz4a4z
- 此快照首次捕获于
- 2025/12/03 03:31 3 个月前
- 此快照最后确认于
- 2025/12/03 03:31 3 个月前
解题思路:
这道题一共有两个操作:
1 往队列尾加 个 。
2 删除队列前 个数并输出它们的和。
对于操作 1 ,我们只需要记两个数组,分别记下 的值,和 的个数。
对于操作 2 ,我们可以用一个变量 ,来记下删除的最后一个数的下标,这样就不用真正地删除了。对于输出,直接便利输出就行了。
AC代码:
CPP#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;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...