zoukankan      html  css  js  c++  java
  • atcode062D(预处理&优先队列)

    题目链接:http://abc062.contest.atcoder.jp/tasks/arc074_b

    题意:从3*n个元素中删除n个元素,使得剩余元素中前n个元素的和减后n个元素的和最大;

    思路:用b[i]存储前i个元素中选 n 个元素和能达到的最大值,c[i+1]存储后i个元素中选择 n 个元素能达到的最小值;

    然后再遍历一次,取 max (b[i]-c[i+1]) 即为答案;

    代码:

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <queue>
     4 #define ll long long
     5 using namespace std;
     6 
     7 const int MAXN = 3e5+10;
     8 const ll inf = 0x3f3f3f3f3f3f3f3f;
     9 ll a[MAXN], b[MAXN], c[MAXN];
    10 
    11 int main(void){
    12     int n;
    13     ll cnt1=inf, cnt2=-inf, ans1=0, ans2=0, ans=-inf;
    14     scanf("%d", &n);
    15     for(int i=1; i<=3*n; i++){
    16         scanf("%lld", &a[i]);
    17     }
    18     priority_queue<ll, vector<ll>, greater<ll> > q1;
    19     for(int i=1; i<=2*n; i++){
    20         if(i <= n){
    21             q1.push(a[i]);
    22             ans1 += a[i];
    23             b[i] = ans1;
    24             continue;
    25         }
    26         ll cnt = q1.top();
    27         if(cnt < a[i]){
    28             q1.pop();
    29             q1.push(a[i]);
    30             ans1 -= cnt;
    31             ans1 += a[i];
    32         }
    33         b[i] = ans1;
    34     }
    35     priority_queue<ll, vector<ll>, less<ll> > q2;
    36     for(int i=3*n; i>n; i--){
    37         if(i > 2*n){
    38             q2.push(a[i]);
    39             ans2 += a[i];
    40             c[i] = ans2;
    41             continue;
    42         }
    43         ll cnt = q2.top();
    44         if(cnt > a[i]){
    45             q2.pop();
    46             q2.push(a[i]);
    47             ans2 -= cnt;
    48             ans2 += a[i];
    49         }
    50         c[i] = ans2;
    51     }
    52     for(int i=n; i<=2*n; i++){
    53         ans = max(ans, b[i]-c[i+1]);
    54     }
    55     cout << ans << endl;
    56     return 0;
    57 }
    View Code
  • 相关阅读:
    一个简单的空间配置器
    【转】c++中placement new操作符
    类的operator new与operator delete的重载【转】
    STL中常用的c++语法
    java编程思想-多态
    java编程思想-复用类(2)
    java编程思想-复用类
    import与require的区别
    gulp插件
    gulp-gulpfile.js语法说明
  • 原文地址:https://www.cnblogs.com/geloutingyu/p/6884226.html
Copyright © 2011-2022 走看看