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
转载于:https://www.cnblogs.com/geloutingyu/p/6884226.html
atcode062D(预处理&优先队列)相关推荐
- POJ1722二维spfa+优先队列优化
题意: 给你一个有向图,然后求从起点到终点的最短,但是还有一个限制,就是总花费不能超过k,也就是说每条边上有两个权值,一个是长度,一个是花费,求满足花费的最短长度. 思路: 一开 ...
- HDU 1430 魔板(康托展开+BFS+预处理)
魔板 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- HDU - 3533 Escape(预处理+A*)
题目链接:点击查看 题目大意:题意我感觉描述的很不清楚..是看网上其他大佬的博客总结来的,大意就是我们要从点(0,0)走到点(n,m),然后在一些地方设置了炮塔(炮塔视为墙),可以向一个方向周期性地发 ...
- 如何用python进行数据预处理_Python数据预处理
数据预处理是指在对数据进行数据挖掘之前,先对原始数据进行必要的清洗.集成.转换.离散和规约等一系列的处理工作,已达到挖掘算法进行知识获取研究所要求的最低规范和标准.通常数据预处理包括:数据清洗.数据集 ...
- C++ 笔记(32)— 预处理、文件包含include、宏替换define、条件包含ifndef、define
C/C++预处理器在源代码编译之前对其进行一些文本性质的操作. 它的主要任务包括删除注释 . 插入 #include 指令包含的文件的内容 . 定义和替换由 #defme 指令定义的符号以及确定代码的 ...
- GCC 编译 C++ 程序分步骤流程(预处理 gcc -E、编译 gcc -S、汇编 gcc -c 和链接 gcc 以及 gcc -o 选项)
C 或者 C++ 程序从源代码生成可执行程序的过程,需经历 4 个过程,分别是预处理.编译.汇编和链接. 同样,使用 GCC 编译器编译 C 或者 C++ 程序,也必须要经历这 4 个过程.但考虑在实 ...
- 白化(预处理步骤)【转】
白化(预处理步骤)[转] 介绍 我们已经了解了如何使用PCA降低数据维度.在一些算法中还需要一个与之相关的预处理步骤,这个预处理过程称为白化.举例来说,假设训练数据是图像,由于图像中相邻像素之间具有很 ...
- 机器学习PAL数据预处理
机器学习PAL数据预处理 本文介绍如何对原始数据进行数据预处理,得到模型训练集和模型预测集. 前提条件 完成数据准备,详情请参见准备数据. 操作步骤 登录PAI控制台. 在左侧导航栏,选择模型开发和训 ...
- 优先队列的应用 C++实现
优先队列的应用 C++实现 优先队列可以用堆来实现, 堆底层可以用数组表示, 通过索引关系,可以表示成一颗二叉完全树 C++的STL提供了相应的容器适配器 包含在queue头文件中 下面通过一道题来看 ...
最新文章
- 项目管理工具到底应该为谁服务?
- 大一就会这么多,还在问有没有前途? | 每日趣闻
- 003_支持并发的饿汉单例
- 利用Matlab比较IIR和FIR,细说IIR滤波器和FIR滤波器的区别
- Listener--------监听器
- android 获取ArrayList的Capacity
- JavaFX官方教程(十二)之树动画示例
- 资源包技巧和最佳实践
- java 中文 音序,java 中文字符串数组按照音序排列
- 自动Shader优化器glsl_optimizer的编译与使用
- 计算机软件著作权登记怎么填写,计算机软件著作权登记申请表填写说明
- 比较:Java和python
- MybatisPlus的CRUD操作
- 了解Spring的变迁从Spring3到Spring5
- windows安装ssh服务
- gitlab增加p3c-hook强制代码规范
- 数电基础知识——原码、反码、补码
- html 投票系统,投票系统 html页面
- 微服务设计 10 大反模式和陷阱
- 中学物理奥林匹克竞赛竞赛大纲
热门文章
- 派生类的拷贝构造【C++继承】
- 这几个juniper巡检命令超实用
- Linux 面试最高频的 5 个基本问题!
- android 截屏指定区域,Android截图 截取ContentView 截取指定的View并且保存
- centos cmake安装mysql_Centos安装mysql实例教程
- mac怎么合并两个容器_PDF怎样合并?在Mac上合并PDF文件的最佳方法
- goland创建一个不限长度的字节切片_Go语言入门必知教程-切片
- nginx如何处理php请求,Nginx是如何处理HTTP请求的
- python预测随机数据_随机森林预测
- d-s 多传感器信息融合 matlab实现_自动驾驶中的多传感器融合