Day3 T2 小信做核酸

时间:2s 空间:256M

题目描述:

学校楼下在做核酸,为了证明有的同学今天做过核酸了,小信给做核酸的人都发了一张号码牌。小信会对同学们进行以下两种操作:

  • 1 x y:让y个人加入排核酸的长队,并给他们每个人都发写着x的号码牌 。

  • 2 y:从长队前面放行y个人去做核酸,并计算这y个人手里拿的号码牌的和。

请你帮助小信进行t次操作。

输入格式:

第一行包含一个整数 t。

随后t行每行按格式包含一次操作 。

输出格式:

对于每次2操作,输出一个整数表示答案。

约定:

对于100%的数据,1\leq t\leq 2\times 10^{5} ,0\leq x \leq 10^{9},1\leq y\leq 10^{9}

题目是一道数据结构操作题。看y的10e9知朴素算法会超时。所以队列中入队一个结构体(其实可以是pari<int,int>)。用计算来减少时间复杂度。

#include<bits/stdc++.h>
using namespace std;
struct node{
	long long x;
	long long y;
}a[250000];
int head=1,tail;
long long sum=0;
int t;
int main(){
	
	scanf("%d",&t);
	while(t--){
		int k;
		scanf("%d",&k);
		if(k==1){
			tail++;
			
			scanf("%lld%lld",&a[tail].x,&a[tail].y);
		}else{
			long long y;
			scanf("%lld",&y);
			while(y){
				if(a[head].y<=y){
					sum+=a[head].x*a[head].y;
					y-=a[head].y;
					head++;
				}else{
					sum+=a[head].x*y;
					a[head].y-=y;
					y=0;
				}
			}
			printf("%lld\n",sum);
			sum=0;
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值