题目链接:https://vjudge.net/problem/CodeForces-948C
转自:https://blog.csdn.net/doncoder/article/details/81138211
题意:有n堆雪,n个温度,求第i天融化的雪的数量。
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
long long a[maxn],t[maxn],pre[maxn];
int main()
{
priority_queue <long long,vector <long long >,greater<long long > >q;
int n;
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
scanf("%lld",&a[i]);
}
for(int i=1; i<=n; i++)
{
scanf("%lld",&t[i]);
pre[i]=pre[i-1]+t[i];
}
for(int i=1; i<=n; i++)
{
long long ans=0;
long long x=pre[i-1]+a[i];
q.push(x);
while(!q.empty()&&pre[i]>=q.top())//当天可以融化
{
ans+=q.top()-pre[i-1];//计算答案
q.pop();
}
ans+=q.size()*t[i];//没能完全融化的雪堆的贡献
printf("%lld ",ans);
}
return 0;
}