HihoCoder - 1886 :中位数2(贪心)
描述
对于一个长度为n的数列A,我们如下定义A的中位数med(A):
当n是奇数时,A的中位数是第(n+1)/2大的数;当n是偶数时,A的中位数是第n/2大的数和第n/2+1大的数的平均值。
同时,我们如下定义A的前缀中位数和:
S(A) = med(B1) + med(B2) + med(B3) + ... + med(Bn)
其中Bi是A长度为i的前缀,即Bi=(A1, A2, A3 ... Ai-1, Ai),1 ≤ i ≤ n。
现在给定一个长度为n的数列X,我们希望通过将X中的数重新排列得到数列Y,使得S(Y)最大。
例如对于X=(2, 3, 1, 5, 4),将X重新排列成Y=(5, 4, 3, 2, 1)会使得S(Y)最大,为5 + 4.5 + 4 + 3.5 + 3 = 20。
为了描述方便,我们用一个1-n的排列P来表示重排的方法,即P满足XPi = Yi, 1 ≤ i ≤ n。例如在上面将X变成Y的重排中,P=(4, 5, 2, 1, 3)。
你能找到使S(Y)最大重排方案P吗? 如果有多个P满足条件,输出字典序最小的P。
对于两个长度为n排列P和Q,我们称P字典序小于Q当且仅当存在k满足
1. 1 ≤ k ≤ n 且
2. 对于任意i ≤ k,有Pi=Qi,且
3. Pk < Qk
输入
第一行包含一个整数n (1 ≤ n ≤ 100000)
第二行包含n个整数,分别是X1, X2, ... Xn (1 ≤ Xi ≤ n)
输出
一行包含n个整数代表字典序最小的P
- 样例输入
-
5
1 2 3 4 5 - 样例输出
-
5 4 1 3 2
思路:大的数如果后放,是很难作为中位数的,所以大的数应当靠前放。 而在放了几个足够大的数后,我们考虑可以在中位数不变的情况下,从左到右放几个数,从而保证结果最大,而字典序最小。
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
struct in{ int x,pos; }s[maxn];
bool cmp(in w,in v){ return w.x==v.x?w.pos<v.pos:w.x>v.x; }
int ans[maxn],used[maxn],pos;
int main()
{
int N; scanf("%d",&N);
rep(i,,N) scanf("%d",&s[i].x),s[i].pos=i;
sort(s+,s+N+,cmp); pos=;
rep(i,,N){
if(used[s[i/+].pos]) {
while(used[pos]) pos++;
ans[i]=pos; used[pos]=;
}
else ans[i]=s[i/+].pos,used[s[i/+].pos]=;
}
rep(i,,N) printf("%d ",ans[i]);
return ;
}
HihoCoder - 1886 :中位数2(贪心)的更多相关文章
- AcWing:105. 七夕祭(前缀和 + 中位数 + 分治 + 贪心)
七夕节因牛郎织女的传说而被扣上了「情人节」的帽子. 于是TYVJ今年举办了一次线下七夕祭. Vani同学今年成功邀请到了cl同学陪他来共度七夕,于是他们决定去TYVJ七夕祭游玩. TYVJ七夕祭和11 ...
- hihoCoder #1053 : 居民迁移(贪心,二分搜索,google在线技术笔试模拟)
#1053 : 居民迁移 时间限制:3000ms 单点时限:1000ms 内存限制:256MB 描述 公元2411年,人类开始在地球以外的行星建立居住点.在第1326号殖民星上,N个居住点分布在一条直 ...
- hihoCoder 1309:任务分配 贪心 优先队列
#1309 : 任务分配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定 N 项任务的起至时间( S1, E1 ), ( S2, E2 ), ..., ( SN, ...
- hihoCoder 1051补提交卡(贪心 枚举)
http://hihocoder.com/problemset/problem/1051 既然要选择最长连续提交天数,那么提交卡必须连续使用才有可能得到最优解,这样贪心,然后从头到尾扫一遍求出最大值. ...
- 【贪心+中位数】【UVa 11300】 分金币
(解方程建模+中位数求最短累积位移) 分金币(Spreading the Wealth, UVa 11300) 圆桌旁坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一 ...
- hihoCoder 1051 补提交卡(贪心,枚举)
#1051 : 补提交卡 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho给自己定了一个宏伟的目标:连续100天每天坚持在hihoCoder上提交一个程序.100天过 ...
- 中位数&贪心
谁能想到基本算法就这么难呢?我想去冲省选,但是迟迟在这些地方 花时间 算是提升自己的思维算了. 这道题呢 答案其实很简单每个数在a的位置和在b的位置之差的累加/2即是答案为什么呢?考虑当前数字 要向后 ...
- hihoCoder 1578 Visiting Peking University 【贪心】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛)
#1578 : Visiting Peking University 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Ming is going to travel for ...
- [2016湖南长沙培训Day4][前鬼后鬼的守护 chen] (动态开点线段树+中位数 or 动规 or 贪心+堆优化)
题目大意 给定一个长度为n的正整数序列,令修改一个数的代价为修改前后两个数的绝对值之差,求用最小代价将序列转换为不减序列. 其中,n满足小于500000,序列中的正整数小于10^9 题解(引自mzx神 ...
随机推荐
- C++中int、string等常见类型转换
1.int型与string型的互相转换 最佳实践: int型转string型 void int2str(const int &int_temp,string &string_temp) ...
- NIO 之 ByteBuffer
前言 对于刚接触ByteBuffer人来说,想要完全理解会稍微有点困难,正巧前几天有人问我,想到好久没写文章,就整理一下. 概念理解 对于ByteBuffer的一些概念不理解的情况下,如果直接打开源码 ...
- C#中使用Log4记录日志
具体步骤如下: 从网上下载log4net对应.net版本的dll 在C#项目中引用该dll 创建log4net对应的配置文件 在程序中使用 log4net的配置文件如下: <?xml versi ...
- php7 编译 win32ps 模块
碰到了很多问题 ,但最终都解决了,感觉不错. 1)下载 php source, php sdk, 以及 win32ps的源代码 2) 参照下面的连接进行编译. https://wiki.php.net ...
- 词向量-LRWE模型-更好地识别反义词同义词
上一节,我们介绍利用文本和知识库融合训练词向量的方法,如何更好的融合这些结构化知识呢?使得训练得到的词向量更具有泛化能力,能有效识别同义词反义词,又能学习到上下文信息还有不同级别的语义信息. 基于上述 ...
- English trip -- VC(情景课)9 A Get ready
She is doing homwork He is doing laundry He is drying the dishes She is making lunch She is making t ...
- Sidekiq(部分基础,有几个使用案例和active_job的用法)
Sidekiq (8700✨) git : https://github.com/mperham/sidekiq https://www.cnblogs.com/richard1234/p/3829 ...
- android--------ListView和ExpandableListView的侧滑删除操作
本案例主要实现了ListView和ExpandableListView的侧滑删除操作功能 效果图: ListView的Adapter类 private class SlideAdapter exten ...
- 『科学计算_理论』PCA主成分分析
数据降维 为了说明什么是数据的主成分,先从数据降维说起.数据降维是怎么回事儿?假设三维空间中有一系列点,这些点分布在一个过原点的斜面上,如果你用自然坐标系x,y,z这三个轴来表示这组数据的话,需要使用 ...
- Python多线程多进程
一.线程&进程 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程, ...