题目

题目链接

题解

yxc讲解


y总讲已经很好了,但是不得不说,无论是他的基础课还是提高课什么的,都不会去带着你分析代码,这确实让人很头大。


这里我就说一下我当时疑惑的点:

  1. 为什么加if (l > r) break

    该语句所处的循环相当于在按着顺序进行排序操作。在栈中,操作0和操作1是交替出现。按照y总的说法需要一个小人洒豆子,最开始小人兜里有n个豆子,每到一个位置就丢一颗豆子,该位置的最终值就是小人跑到该位置还没来得及丢豆子时手中的豆子数。如果当前的操作是操作0,小人从右边开始左跑,跑到当前操作0对应的q(不含q),小人跑过的地方进行赋值;同理,如果当前操作是操作1,则让小人瞬移到左边还没赋值的左边界处(l记录的位置),向右跑直到跑到当前操作1对应的q(不含q);又到下一个操作0了,小人瞬移到右边还没赋值的右边界处(r记录的位置),继续跑,道理类似。

    重点是if (l > r) break,看如下情况:

    蓝色线为总的排序段,绿色线为每次要进行排序的段,红色是小黄人的行动路径,紫色的线也是要排序的段,但其实这些段是无效段,因为小黄人进行完第四次洒豆子时兜里已经没豆子了(即l > r),那后面的排序也就没用了,不影响最终结果,就像上图中箭头三左侧的段都已经降序了,下面紫色的降序段也就没用了,右侧的紫色降序段同理吧。

    也就是说这条判断语句就是起到一种优化的作用,让后面没用的段不用再循环了,提早跳出循环。

  2. 为什么要进行if (top % 2)后面的一系列操作?

    除了紫色线和灰色标识之外其他含义不变,这里的紫色线和灰色标记描述的是if (top % 2)中执行的操作。

    如果遍历完了整个栈,最后仍存在交集,也就是说小黄人的豆子没洒完呢,小黄人必须要洒完它,所以会判断最后一个操作是0还是1,如果是0说明最后一个操作是降序操作,那么他就要从紫线的左端跑到紫线的右端,把豆子洒完;如果最后一个操作是1,则进行升序操作,小黄人要将豆子从右边洒到左边。洒完豆子小黄人才能舒舒服服地回家刷题 。

    很显然,这句话是不能去掉的,如果没有这句话,紫色对应的序列段是赋不上值的。

代码

#include<bits/stdc++.h>
#define PII pair<int, int>
using namespace std;const int N = 1e5+10;PII stk[N];int n, m, p, q, top, ans[N];int main()
{cin >> n >> m;while (m --) {cin >> p >> q;if (!p) {while (top && stk[top].first == 0) q = max (q, stk[top --].second);while (top >= 2 && stk[top-1].second <= q) top -= 2;stk[++ top] = {p, q};} else if (top) {while (top && stk[top].first == 1) q = min (q, stk[top --].second);while (top >= 2 && stk[top-1].second >= q) top -= 2;stk[++ top] = {p, q};}}int l = 1, r = n, k = n;for (int i = 1;i <= top;i ++) {if (stk[i].first == 0) while (l <= r && r > stk[i].second) ans[r --] = k --;else while (l <= r && l < stk[i].second) ans[l ++] = k --;if (l > r) break;}if (top % 2) while (l <= r) ans[l ++] = k --;else while (l <= r) ans[r --] = k --;for (int i = 1;i <= n;i ++) cout << ans[i] << ' '; return 0;
}

蓝桥杯2021年第十二届真题第一场-双向排序相关推荐

  1. 蓝桥杯2021年第十二届省赛-杨辉三角形

    蓝桥杯2021年第十二届省赛真题-杨辉三角形 - C语言网 (dotcpp.com)https://www.dotcpp.com/oj/problem2610.html 参考: 2021第十二届蓝桥杯 ...

  2. C++ | 蓝桥杯2021年第十二届卡片问题(源代码:C语言/C++/Python)

    ================================================ 博主github:https://github.com/MichaelBeechan 博主CSDN:h ...

  3. [蓝桥杯][2019年第十届真题]扫地机器人(二分+贪心)

    题目描述 小明公司的办公区有一条长长的走廊,由 N 个方格区域组成,如下图所 示. 走廊内部署了 K 台扫地机器人,其中第 i 台在第 Ai 个方格区域中. 已知扫地机器人每分钟可以移动到左右相邻的方 ...

  4. [蓝桥杯][2019年第十届真题]糖果(状压dp)

    题目描述 糖果店的老板一共有 M 种口味的糖果出售.为了方便描述,我们将 M 种 口味编号 1 ∼ M. 小明希望能品尝到所有口味的糖果.遗憾的是老板并不单独出售糖果,而 是 K 颗一包整包出售. 幸 ...

  5. [蓝桥杯][2019年第十届真题]修改数组(并查集)

    题目描述 给定一个长度为 N 的数组 A = [A1, A2, · · · AN ],数组中有可能有重复出现 的整数. 现在小明要按以下方法将其修改为没有重复整数的数组.小明会依次修改 A2,A3,· ...

  6. [蓝桥杯][2019年第十届真题]等差数列

    题目描述 数学老师给小明出了一道等差数列求和的题目.但是粗心的小明忘记了一 部分的数列,只记得其中 N 个整数. 现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有 几项? 输入 ...

  7. [蓝桥杯][2019年第十届真题]外卖店优先级(模拟)

    题目描述 "饱了么"外卖系统中维护着 N 家外卖店,编号 1 ∼ N.每家外卖店都有 一个优先级,初始时 (0 时刻) 优先级都为 0. 每经过 1 个时间单位,如果外卖店没有订单 ...

  8. [蓝桥杯][2019年第十届真题]后缀表达式(正解!!)

    题目描述 给定 N 个加号.M 个减号以及 N + M + 1 个整数 A1, A2, · · · , AN+M+1,小 明想知道在所有由这 N 个加号.M 个减号以及 N + M + 1 个整数凑出 ...

  9. [蓝桥杯][2019年第十届真题c/c++B组]迷宫(寻找路径bfs及文件输入输出)

    试题 E: 迷宫 1.问题描述 2.思路详解 3.AC代码 1.问题描述 下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可以通行的地方. 010000 000100 00100 ...

  10. [蓝桥杯][2019年第十届真题c/c++B组]后缀表达式(解释sum -= 2*a[i])

    后缀表达式 给定 N 个加号.M 个减号以及 N + M + 1个整数 A1 , A2 , · · · , AN+M+1 ,小明想知道在所有由这 N 个加号.M 个减号以及 N + M + 1个整数凑 ...

最新文章

  1. Intent七大属性
  2. 经典正则表达式[收藏]
  3. 3520a mmz错误解决方法
  4. resource.arsc二进制内容解析 之 Dynamic package reference
  5. npm 可视化html编辑器,超给力 Vue.js 可视化H5拖拽编辑器Quark-H5
  6. 特斯拉标准续航版Model Y为什么下架?马斯克这么回答
  7. JDBC个人学习总结
  8. 计算机远程控制安全吗,远程控制电脑危险吗?向日葵远程控制软件安全吗?
  9. 2019顶级WordPress音频和视频插件
  10. LNBP10L_LNB电源和控制电压调节器——科时进商城
  11. MIPI扫盲系列博文
  12. JavaScript中的mouseover与mouseenter,mouseout和mouseleave的区别
  13. jq操作数组的常用方法
  14. sphinx启动searchd进程出现search error failed to open No such file or directory
  15. HuaWei ❀ Virtual Firewalld 虚拟防火墙
  16. 辉羲智能完成天使+轮融资,用创新计算平台赋能智慧出行
  17. c语言编程 黑色星期五,求黑色星期五问题~
  18. 树莓派上使用python
  19. mac系统安装GoLand,并配置go环境
  20. 高级信息系统项目管理(高项)论文——质量管理

热门文章

  1. Linux网卡bond
  2. 音乐外链生成 html,音乐外链生成工具V2.1 支持14个音乐网站外链提取转换
  3. MIT molecular Biology 笔记11 位点特异性重组 和 DNA转座
  4. cba比赛比分预测_cba盘口分析
  5. android 7 蓝牙版本,Android N及高版本蓝牙适配
  6. 密码重置用HTML怎么弄,路由器重设密码怎么设置?
  7. 澳洲计算机专业几年,澳洲计算机硕士几年
  8. 《Spring实战》学习笔记-第五章:构建Spring web应用
  9. png 微软ppt 透明度_完美PNG半透明窗体解决方案
  10. 英语字母演变——wsdchong