博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3N Numbers
阅读量:5869 次
发布时间:2019-06-19

本文共 2228 字,大约阅读时间需要 7 分钟。

D - 3N Numbers


Time limit : 2sec / Memory limit : 256MB

Score : 500 points

Problem Statement

Let N be a positive integer.

There is a numerical sequence of length 3Na=(a1,a2,…,a3N). Snuke is constructing a new sequence of length 2Na', by removing exactly N elements from a without changing the order of the remaining elements. Here, the score of a' is defined as follows: (the sum of the elements in the first half of a')−(the sum of the elements in the second half of a').

Find the maximum possible score of a'.

Constraints

  • 1≤N≤105
  • ai is an integer.
  • 1≤ai≤109

Partial Score

  • In the test set worth 300 points, N≤1000.

Input

Input is given from Standard Input in the following format:

Na1 a2 … a3N

Output

Print the maximum possible score of a'.


Sample Input 1

23 1 4 1 5 9

Sample Output 1

1

When a2 and a6 are removed, a' will be (3,4,1,5), which has a score of (3+4)−(1+5)=1.


Sample Input 2

11 2 3

Sample Output 2

-1

For example, when a1 are removed, a' will be (2,3), which has a score of 2−3=−1.


Sample Input 3

38 2 2 7 4 6 5 3 8

Sample Output 3

5

For example, when a2a3 and a9 are removed, a' will be (8,7,4,6,5,3), which has a score of (8+7+4)−(6+5+3)=5.

 

 

/// 题意是:有一个 3n 长的序列,现拿走 n 个数,然后分成前 n 个数,和后 n 个数 ,求前n个数和减后 n 个数和的最大值

// 用一个优先队列保存区间最大 n 数和,并赋给数组保存

用一个优先队列保存区间最小 n 数和,并赋给数组保存

最后循环一遍即可

 

1 #include 
2 using namespace std; 3 #define LL long long 4 #define INF (1LL<<62) 5 #define MX 100005*3 6 7 LL a[MX]; 8 LL ma[MX]; 9 LL mi[MX];10 11 int main()12 {13 LL n;14 cin>>n;15 16 for (int i=1;i<=3*n;i++)17 scanf("%lld",&a[i]);18 priority_queue
Q;19 LL sum = 0;20 for (int i=1;i<=2*n;i++)21 {22 Q.push(-a[i]);23 sum+=a[i];24 25 if (i>n) sum += Q.top(),Q.pop();26 ma[i]=sum;27 }28 29 while (!Q.empty()) Q.pop();30 sum=0;31 for (int i=3*n;i>=n+1;i--)32 {33 Q.push(a[i]);34 sum+=a[i];35 36 if (i<=2*n) sum -= Q.top(),Q.pop();37 mi[i]=sum;38 }39 40 LL ans = -INF;41 for (int i=n;i<=2*n;i++)42 ans = max (ans, ma[i]-mi[i+1]);43 cout<
<
View Code

 

 

 

转载于:https://www.cnblogs.com/haoabcd2010/p/6884609.html

你可能感兴趣的文章
as3.0 切分位图
查看>>
Oracle维护命令合集
查看>>
zabbix监控部署
查看>>
关于Tomcat下项目中文名在Windows和Linux下编码混乱问题解决
查看>>
Android 系统 root 破解原理分析
查看>>
iptables模板
查看>>
关于redux-saga中take使用方法
查看>>
SVN部署(一)
查看>>
RabbitMQ3.6.3集群搭建+HAProxy1.6做负载均衡
查看>>
内容营销11金规
查看>>
成大事必备的9种心态
查看>>
struts中的xwork源码下载地址
查看>>
Rhel6服务器xinetd超级守护进程浅谈
查看>>
实战教程:如何建立双机热备系统
查看>>
集合框架(List集合的特有功能概述和测试)
查看>>
nginx 多域名 配置
查看>>
Ubuntu 12.04 下安装 VirtualBox
查看>>
checkbox 全选和反选
查看>>
C#基础知识整理:基础知识(15) ICollection、迭代及泛型
查看>>
第二章:Shiro入门——深入浅出学Shiro细粒度权限开发框架
查看>>