龙珠游戏 / X龙珠

题目链接:ybt高效进阶4-1-3 / luogu P5462

题目大意

有一个队列(里面的数互不相同),然后你每次可以取出相邻的两个数,按它们的前后顺序放到另一个队列中,最终所有数都会被放过去。
然后要你让这个队列的字典序最大的方案,输出这个新的队列最终的样子。

思路

首先,它队列里的数是互不相同,然后又要字典序最大。

那我们贪心一下,就可以想到,对于每次选相邻的两个数,你肯定是要前面的那个尽可能大(就是当时数中最大的)。
当然你前面的那个不能是数列中最后面的数,就算它最大。(因为这样就不是两个数,它后面没有数)

那你可以想到,你可以维护一个数的下一个数是哪个。
(我用的是类似链表的感觉,然后还掺和了一点并查集的味道,可以看看代码)
然后你用堆存可以作为前面的数的数,然后每次取出最大的。
在确认它之前没有被作为后面取出以及它后面有数之后,你就把它和它后面的数标记为选了,然后把这两个数放进答案的队列里。

最后你就把答案的队列输出即可。

代码

#include<queue>
#include<cstdio>using namespace std;int n, a[100001], ans[100001];
int nxt[100001];
bool used[100001];
priority_queue <pair<int, int>, vector<pair<int, int> >, less<pair<int, int> > > q;int get_nxt(int now) {//维护它的下一个是哪个(类似并查集的感觉)if (nxt[now] == now) return now;return nxt[now] = get_nxt(nxt[now]);
}int main() {scanf("%d", &n);for (int i = 1; i <= n; i++) {scanf("%d", &a[i]);nxt[i] = i;if (i != n) q.push(make_pair(a[i], i));}nxt[n + 1] = n + 1;while (!q.empty()) {int now = q.top().second;q.pop();//这个珠子已经被拿走了if (used[now] || get_nxt(now + 1) > n) continue;used[now] = 1;used[get_nxt(now + 1)] = 1;//记录被选了printf("%d %d ", a[now], a[get_nxt(now + 1)]);nxt[now] = nxt[now + 1] = get_nxt(get_nxt(now + 1) + 1);//更改下一个}return 0;
}

【ybt高效进阶4-1-3】【luogu P5462】龙珠游戏 / X龙珠相关推荐

  1. 【ybt高效进阶4-4-3】【luogu P4513】公园遛狗 / 小白逛公园

    公园遛狗 / 小白逛公园 题目链接:ybt高效进阶4-4-3 / luogu P4513 题目大意 给你一个序列,要维护两个操作. 单点修改和在一个区间中找权值最大的子区间的权值. 思路 其实这个是很 ...

  2. 【ybt高效进阶1-5-2】【luogu P3456】山峰和山谷 / GRZ-Ridges and Valleys

    山峰和山谷 / GRZ-Ridges and Valleys 题目链接:ybt高效进阶1-5-2 / luogu P3456 题目大意 对于山谷和山峰,我们这样定义: 它们是一个连通块(其中的高度都相 ...

  3. 【YBT高效进阶】1基础算法/4深度优先搜索/2数独游戏

    [YBT高效进阶]1基础算法/4深度优先搜索/2数独游戏 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 数独是一种传统益智游戏,你需要 ...

  4. 【ybt高效进阶5-6-3】耗费体力(单调队列优化DP)

    耗费体力 题目链接:ybt高效进阶5-6-3 题目大意 有一行树,树有高度,要从最左边跳到最右边,如果从高的树跳向低的就不需要花费体力,否则就要花费一点体力. 然后每次给你跳一次最远能跳的距离,问你最 ...

  5. YBT高效进阶 6.2.5 余数之和

    YBT高效进阶 6.2.5 余数之和 思路 (n,k)(n,k)(n,k) =∑i=1nkmodi=\sum_{i=1}^nk\bmod i=∑i=1n​kmodi =∑i=1nk−⌊ki⌋=\sum ...

  6. 【YBT高效进阶】1基础算法/1逆推算法/2奇怪汉诺塔

    [YBT高效进阶]1基础算法/1逆推算法/2奇怪汉诺塔 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 汉诺塔问题,条件如下: 这里有 ...

  7. 【ybt高效进阶 21161】复杂问题(图论)(分类讨论)(MIM / Meet In Middle)

    复杂问题 题目链接:ybt高效进阶 21161 题目大意 给你一个无向图,我们定义一个四元环为一个四个点的集合,这四个点(u,v,x,y)构成的子图,存在边 (u,v),(v,x),(x,y),(y, ...

  8. 【ybtoj高效进阶6-6-2】 期望分数/WJMZBMR打osu! / Easy 【luogu P1365】

    期望分数[ybtoj高效进阶6-6-2] WJMZBMR打osu! / Easy [luogu P1365] 题目描述: 给定一个长度为n的由 o,x,? 组成的字符串.计算分数的规则如下:连续 a ...

  9. 【ybtoj 高效进阶 3.1】 【并查集】 逐个击破

    [ybtoj 高效进阶 3.1] [并查集] 逐个击破 题目 解题思路 换一个思路 求出保留的边 用总边权减去保留的 能被保留下来的边的两个端点不能都被k军团占领 我们要做的就是维护每个连通块 有被占 ...

最新文章

  1. PATH 与CLASSPATH区别
  2. 智能车竞赛技术报告 | 节能信标组 - 华南理工大学 - 华工雨花队
  3. python【力扣LeetCode算法题库】面试题57 - II-和为s的连续正数序列(滑动窗口)
  4. python开源代码-这7个开源的Python库,让你轻松代码分析
  5. django--模板继承、组件、自定义标签
  6. 中国电信发布转型升级战略:构建一横四纵生态圈
  7. MacOS安装pip失败,提示:SyntaxError: invalid syntax
  8. gocd_如何将DangerJS集成到GoCD管道中
  9. android 指南针传感器,android 传感器使用 Compass指南针的实现功能
  10. 11.7动手动脑作业
  11. 【我的开源】股票软件简介+源码(蜗牛股票软件)
  12. h5分享图片到微信好友、微信朋友圈、qq好友功能
  13. window10_vs2015安装教程
  14. Unity源码分享之 电视遥控器按钮事件控制
  15. error: You must be logged in to the server (Unauthorized)
  16. 放大器输入级的差动放大 + 电流镜
  17. 微信分享小功能后端接口简单实现
  18. 红外测试操作步骤_近红外光谱仪操作步骤_近红外光谱仪波长范围
  19. 使用Javascript直接将网页进行简繁转换 转
  20. 01前端学习之HTML5

热门文章

  1. 2023年你最值得了解的信息技术-国内篇
  2. 名帖240 祝允明 行书《刘君文威听泉记》
  3. KNIME二次开发之环境搭建
  4. mysql数据库中的存储引擎
  5. 求包含n(n>1)个元素的无序序列中第k小的元素。
  6. windows api 扫雷游戏
  7. SOFTMAX回归模型
  8. VMware虚拟机群晖7.2 Beta (懒人包)
  9. 瓦罐香沸快餐 特色盈利项目
  10. python 循环列表删除元素