zoukankan      html  css  js  c++  java
  • Codeforces Round #437 (Div. 2, based on MemSQL Start[c]UP 3.0

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

    题解: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
    ",ans);
        return 0;
    }
    /********************
    
    ********************/
    View Code
  • 相关阅读:
    RAID、LVM和btrfs文件系统
    RAID、LVM和btrfs文件系统
    python实现二分叉查找
    python实现二分叉查找
    python实现二分叉查找
    python实现二分叉查找
    java集合的简单用法
    java集合的简单用法
    java集合的简单用法
    用 AJAX 读取xml 节点属性值
  • 原文地址:https://www.cnblogs.com/acjiumeng/p/7623251.html
Copyright © 2011-2022 走看看