码迷,mamicode.com
首页 > 数据库 > 详细

Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0 - Round 2) E

时间:2017-10-03 10:37:03      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:include   second   const   play   using   而且   没有   贪心   amp   

题意:减前面的数,加后面的数,保证最后不剩下数,加减次数要相同;

题解: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;
}
/********************

********************/
View Code

 

Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0 - Round 2) E

标签:include   second   const   play   using   而且   没有   贪心   amp   

原文地址:http://www.cnblogs.com/acjiumeng/p/7623251.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!