NC221057. Compute'sOCD
描述
输入描述
第一行有三个整数 n, A, B 分别表示 Compute 获得的人物卡的数量,氪金使属性 +1 和 -1 所需要的花费。
接下来一行有 n 个整数 ,分别表示 Compute 获得的每张卡的属性值 。
输出描述
输出 n 行,第 i 行输出一个整数代表 Compute 使前 i 张人物卡属性相同的最少花费。
示例1
输入:
5 3 2 5 1 4 2 3
输出:
0 8 11 13 15
C++ 解法, 执行用时: 48ms, 内存消耗: 2752K, 提交时间: 2022-03-05 16:43:28
#include<cstdio> #include<cstring> #include<queue> #include<algorithm> using namespace std; priority_queue<int> L; priority_queue<int, vector<int>, greater<int> > R; int n,ma,mb; long long s,lsum,rsum; int main() { scanf("%d%d%d",&n,&ma,&mb); scanf("%d",&s); printf("0\n"); lsum=rsum=0; for (int i=2; i<=n; i++) { int x; scanf("%d",&x); if (x<=s) L.push(x),lsum+=x; else R.push(x),rsum+=x; while ((L.size()+1)*ma<R.size()*mb) lsum+=s,L.push(s),s=R.top(),rsum-=s,R.pop(); while (L.size()*ma>(R.size()+1)*mb) rsum+=s,R.push(s),s=L.top(),lsum-=s,L.pop(); long long ans=(s*L.size()-lsum)*ma+(rsum-s*R.size())*mb; printf("%lld\n",ans); } return 0; }