http://uoj.ac/problem/280

非常难想的贪心,用set\(O(nlogn)\)。

调了一天qwq。

题解

#include<set>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N = 100003; multiset <int> S;
multiset <int> ans;
multiset <int> :: iterator L;
multiset <int> :: iterator R; int a[N], n, hh, m; int main() {
scanf("%d", &n);
for (int i = 1; i <= n; ++i) {
scanf("%d", a + i); a[i] <<= 1;
S.insert(a[i]);
}
stable_sort(a + 1, a + n + 1);
int tmp;
for (tmp = (n + 1) / 2; tmp >= 1; --tmp)
if (a[tmp] == a[tmp + 1])
break; set <int> :: iterator h;
if (tmp == 0) {
S.erase(a[1]); ans.insert(a[1]); m = a[1];
printf("%d ", a[1] >> 1);
for (int i = 2; i <= n; ++i) {
L = S.begin();
h = ans.upper_bound(m);
if (h != ans.end() && (*h < *L || *h <= 2 * (*L) - m)) L = --S.end();
else L = --S.upper_bound(2 * (*L) - m);
printf("%d ", *L >> 1); ans.insert(*L);
if (!ans.count(m)) {
if (*L > m) m = *ans.upper_bound(m);
else m = *ans.lower_bound(m) - 1;
} else if (*L != m) {
if (*L > m) hh = *ans.upper_bound(m);
else hh = *--ans.lower_bound(m);
m = (1ll + m + hh) / 2;
}
S.erase(*L);
}
} else {
m = a[tmp];
S.erase(S.find(m)); S.erase(S.find(m));
ans.insert(m); ans.insert(m);
printf("%d %d ", m >> 1, m >> 1);
tmp = 2; bool flag = false;
while (S.size() > 1) {
L = --S.end();;
if (*L < m) {flag = true; break;}
ans.insert(*L); printf("%d ", *L >> 1);
S.erase(L);
L = S.upper_bound(m);
++tmp;
if (L == S.begin()) break;
--L;
ans.insert(*L); printf("%d ", *L >> 1);
S.erase(L);
++tmp;
} if (flag) {
while (S.size()) {
L = --S.end();;
printf("%d ", *L >> 1);
S.erase(L);
}
return 0;
} tmp = n - tmp;
for (int i = 1; i <= tmp; ++i) {
L = S.begin();
h = ans.upper_bound(m);
if (h != ans.end() && (*h < *L || *h <= 2 * (*L) - m)) L = --S.end();
else L = --S.upper_bound(2 * (*L) - m);
printf("%d ", *L >> 1); ans.insert(*L);
if (!ans.count(m)) {
if (*L > m) m = *ans.upper_bound(m);
else m = *ans.lower_bound(m) - 1;
} else if (*L != m) {
if (*L > m) hh = *ans.upper_bound(m);
else hh = *--ans.lower_bound(m);
m = (1ll + m + hh) / 2;
}
S.erase(L);
}
}
return 0;
}

【UOJ #280】【UTR #2】题目难度提升的更多相关文章

  1. 【uoj#280】[UTR #2]题目难度提升 对顶堆+STL-set

    题目描述 给出 $n$ 个数 $a_1,a_2,...,a_n$ ,将其排为序列 $\{p_i\}$ ,满足 $\{前\ i\ 个数的中位数\}$ 单调不降.求字典序最大的 $\{p_i\}$ . 其 ...

  2. 【UTR #2】[UOJ#278]题目排列顺序 [UOJ#279]题目交流通道 [UOJ#280]题目难度提升

    [UOJ#278][UTR #2]题目排列顺序 试题描述 “又要出题了.” 宇宙出题中心主任 —— 吉米多出题斯基,坐在办公桌前策划即将到来的 UOI. 这场比赛有 n 道题,吉米多出题斯基需要决定这 ...

  3. uoj#280. 【UTR #2】题目难度提升(构造)

    传送门 咱先膜一下\(GXZ\)再说 我们先把序列从小到大排序,然后分情况讨论 无解是不存在的,从小到大输出所有数肯定可行 情况一,如果\(a[mid]=a[mid+1]\),因为最终的中位数也是它们 ...

  4. uoj280 【UTR #2】题目难度提升 堆维护中位数+set

    题目传送门 http://uoj.ac/problem/280 题解 这道题很妙啊. 这种题目如果给予选手足够的时间,每一个选手应该都能做出来. 大概就是核心思路看上去很简单,但是想要推出来并不简单. ...

  5. HDU 3076 ssworld VS DDD 概率dp,无穷级数,oj错误题目 难度:2

    http://acm.hdu.edu.cn/showproblem.php?pid=3076 不可思议的题目,总之血量越少胜率越高,所以读取时把两人的血量交换一下 明显每一轮的胜率和负率都是固定的,所 ...

  6. UVa 11627 - Slalom 二分. oj错误题目 难度: 0

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  7. UOJ Test Round #2

    昨天晚上打的这个比赛,简直一颗赛艇啊-- 感觉发挥的并不好.比赛的时候比较紧张,最后一题还脑残写了个离散化结果爆零了,哎我怎么这么逗逼-- 讲讲比赛经过吧. 比赛之前逗逼地以为是8:00开始,然后淡定 ...

  8. Noip模拟62 2021.9.26

    T1 Set 真就随机化拿了$90$?? 不过还是有依据的,毕竟这道题出解的几率很大,随出答案的概率也极大 所以不妨打一个随机化 1 #include<bits/stdc++.h> 2 # ...

  9. 关于托福改革后的难度、评分和拼分,听听ETS的老师怎么说

    “笔者有幸于几天前去到ETS位于普林斯顿的总部学习,聆听了他们关于托福考试的发展和变革的说明,在这里向大家汇报一下此行的收获.” 当从车上下来那一刻起,我们便被那辽阔的绿草地和宜人的风景所吸引,伴随着 ...

随机推荐

  1. 读书笔记—CLR via C#反射

    前言 这本书这几年零零散散读过两三遍了,作为经典书籍,应该重复读反复读,既然我现在开始写博了,我也准备把以前觉得经典的好书重读细读一遍,并且将笔记整理到博客中,好记性不如烂笔头,同时也在写的过程中也可 ...

  2. 用RequireJS优化Wijmo Web页面

    用RequireJS优化Wijmo Web页面 上周Wijmo 2014 V2版本刚刚发布(下载地址),  有网友下载后发现仅仅使用了40个Widgets的一小部分,还需要加载全部的jquery.wi ...

  3. 远程连接mysql速度慢的解决方法

    最近在公司内部连mysql速度非常慢,一直还以为公司的网络有问题,后经查发现出现这种问题的主要原因是mysql默认开启了DNS的反向解析功能,连接时反向解析计算机名称时耗时严重,导致连接超慢.解决方法 ...

  4. SignalR 2.0 入门与提高

    SignalR 2.0 入门与提高 SignalR 2.0 最近整理了SignalR2.0 部分知识点,原文翻译,由于自己是土鳖,翻译得不好的地方,欢迎指正!仅供各位初学者学习! 第一节. 入门ASP ...

  5. JobTracker等相关功能模块初始化

    [Hadoop代码笔记]Hadoop作业提交之JobTracker等相关功能模块初始化 一.概要描述 本文重点描述在JobTracker一端接收作业.调度作业等几个模块的初始化工作.想过模块的介绍会在 ...

  6. 10.25最后的模拟赛DAY1 answer

    QAQ太困了,大概说一下自己的思路: 其实这题很容易看错题目或是想错,就比如我个傻逼,一开始以为p+q一定等于n.... 咳咳...其实这题不用想太多,我们可以通过这n个字符串一个个假设正确或是不正确 ...

  7. RPC技术

    微软RPC技术学习小结 RPC,即Remote Procedure Call,远程过程调用,是进程间通信(IPC, Inter Process Communication)技术的一种.由于这项技术在自 ...

  8. C/C++基础知识总结——数据的共享与保护

    1. 标识符的作用域与可见性 1.1 作用域 标识符的作用域包括:函数原型作用域.局部作用域.类作用域.命名空间作用域 (1) 函数原型作用域:函数的参与的作用域就是从函数的开始到结束 (2) 局部作 ...

  9. CSS属性合写

    animation:[[ animation-name ] || [ animation-duration ] || [ animation-timing-function ] || [ animat ...

  10. MVC TO LINQ

    // // GET: /Home/ TestTryEntities Db = new TestTryEntities(); public ActionResult Index() { return V ...