Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0 - Round 2) E
Posted walfy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0 - Round 2) E相关的知识,希望对你有一定的参考价值。
题意:减前面的数,加后面的数,保证最后不剩下数,加减次数要相同;
题解:emmmmm,看出是个贪心,先对价值排序,相同就对下标排序,规律是每次找第一个,然后从后往前找没有使用过的下表比他大的第一个,相减,然后直到找不到为止,
但是这样的时间复杂度是O(N^2),想了很久还是不知道怎么用优先队列来优化= =,结果发现别人都不是这个规律做的。。。。,都是直接暴力扔进去,直接减,为了保证减的是最大的,把减过后的数仍两个到队列里,这样保证了再次减的时候相当于,当前数减了之前那个数,而且把中间数扔进了队列
#include<bits/stdc++.h> #define fi first #define se second #define mp make_pair #define pb push_back #define read(a) scanf("%d",&a) #define pii pair<int,int> #define C 0.5772156649 #define pi acos(-1.0) #define ll long long #define mod 1000000007 #define ls l,m,rt<<1 #define rs m+1,r,rt<<1|1 using namespace std; const double g=10.0,eps=1e-7; const int N=300000+10,maxn=60+10,inf=0x3f3f3f; priority_queue<int,vector<int>,greater<int> >q; int main() { int n; read(n); ll ans=0; for(int i=0;i<n;i++) { int a; read(a); if(q.empty()||a<=q.top())q.push(a); else { ans+=a-q.top(); q.pop(); q.push(a); q.push(a); } } printf("%lld\n",ans); return 0; } /******************** ********************/
以上是关于Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0 - Round 2) E的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0 - Round 2)
Codeforces Round #437 C. Ordering Pizza
Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0 - Round 2)
Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0 - Round 2)
Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0 - Round 2)
Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0 - Round 2) E