Problem - D - Codeforces

贪心。

从A的末端插到B的中间,再从B的中间插到C的末端。

可以证明,A->B的过程中,插到中间的左边,和右边的结果是一样的

又因为A->B先插入的,B->C先取出。B->C若长度为偶数可以从中间两个中取较小的。

所以只考虑末尾的两个数即可,使用vector进行插入和删除操作,由于只对末尾进行操作,故复杂度为O(n)

最后检查是否为non-decreasing即可

代码如下

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<iomanip>
#include<cstring>
#include<climits>
#include<cmath>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;#define go(i,a,b) for(int i=a;i<=b;++i)
#define com(i,a,b) for(int i=a;i>=b;--i)
#define mem(a,b) memset(a,b,sizeof(a))
#define fo(i,a) for(int i=0;i<a;++i)typedef long long ll;const int N = 2e5 + 5;typedef vector<int> vec;
int a[N];int main() {int T;cin >> T;int n;while (T--) {cin >> n;vec b, c;bool flag = 1;go(i, 1, n) {cin >> a[i];}for (int i = n; i >= 1; --i) {int len = n - i;b.push_back(a[i]);//从尾部先出//可以证明,无论是插左边还是插右边,其实都是等价的}int l = n;while (l) {if (l % 2 == 0) {if (b[l - 1] < b[l - 2]) {c.push_back(b[l - 1]);b.pop_back();}else {c.push_back(b[l - 2]);b.erase(b.begin() + l - 2);}}else {c.push_back(b[l - 1]);b.pop_back();}--l;}for (int i = 1; i < n; ++i) {if (c[i] < c[i - 1]) {cout << "NO" << endl;flag = 0;break;}}if (flag == 1)cout << "YES" << endl;}
}

CF786-D ABC-SORT相关推荐

  1. linux局部变量特殊字符替换,变量,全局变量,环境变量,特殊符号、管道符命令:cut、sort、uniq、wc、tee、tr、sp...

    变量 常见的变量: PATH:决定shell在哪些目录下寻找命令和程序: HOME:家目录: PWD:当前目录: LOGNAME:当前用户名称: env命令: 查看常见变量: HOSTNAME:表示主 ...

  2. 基本shell编程【3】- 常用的工具awk\sed\sort\uniq\od

    awk awk是个很好用的东西,大量使用在linux系统分析的结果展示处理上.并且可以使用管道, input | awk ''  | output 1.首先要知道形式 awk 'command' fi ...

  3. 批处理(cmd)的学习记录

    批处理的使基本使用 Command Introduction Example set 设置环境变量 set name="小明" call 启动应用程序   rem 解释说明,可通过 ...

  4. samtools常用命令详解

    samtools的说明文档:http://samtools.sourceforge.net/samtools.shtml samtools是一个用于操作sam和bam文件的工具合集.包含有许多命令.以 ...

  5. python 迭代器、生成器、yield、iter

    文章目录 1. 迭代器 2. 生成器 3. 标准库 3.1 过滤 3.2 映射 3.3 合并 3.4 排列组合 3.5 重新排列 4. yield from 5. 可迭代的归约函数 6. iter 还 ...

  6. 【Python】Python列表基本操作

    统一定义列表abc为: abc = ['a', 'b', 'c'] 1.增 按位插入. abc.insert(1, 'd') 表尾追加. abc.append('d') 2.删 按位删除,不再使用. ...

  7. JavaScript笔记-使用JS管理URL链接(前端小技巧)

    如下这个JavaScript代码: var common_ops = {buildUrl:function( path ,params ){//params = { "test": ...

  8. web前端之js快速入门(ECMAscript)

    javascript:首先和java没有任何关系,蹭热度.... 静态网页组成:结构(html).样式(css).动作(javascript 简称 js). 详细教程地址:菜鸟教程 - 学的不仅是技术 ...

  9. 第八章:文本处理工具

    use tools for extracting ,analyzing and manipulating text data 使用提取.分析和处理文本数据的工具 全文阅读 cat:直接抓取文件,一次性 ...

  10. Perl程序设计中常用的函数

    指令:print 语法:print Filehandle LIST 说明: 这个Filehandle可以看作在I(INPUT)/O(OUTPUT)之间的一个桥梁,可以利用FILEHANDLE来做出数据 ...

最新文章

  1. Spring基于Setter函数的依赖注入(DI)
  2. sap.ca.ui.utils.busydialog - scenario1 - opportunity opened
  3. bat 取得服务列表_解读浩泽净水2018业绩:稳定增长背后的服务深化和科技跃进...
  4. 名为 cursor_jinserted 的游标不存在_一个工程师必须了解的测量常识,你不知道怎么行...
  5. 5月27 权限设置及功能
  6. 设计模式---适配器模式(C++实现)
  7. 使用draw.io更改形状编辑图表的方法
  8. kitti数据集_CVPR2020 | PV-RCNN: 3D目标检测 Waymo挑战赛+KITTI榜 单模态第一算法
  9. nodewebkitV0.21.6版本的学习
  10. 华为发布鸿蒙Beta版公测,华为发布鸿蒙OS 2.0手机开发者Beta版:P40、Mate 30系列可申请公测...
  11. 桌面cpu与服务器cpu天梯,秒懂台式电脑CPU性能 桌面CPU天梯图2017年9月最新版
  12. 有关一级域名二级域名三级域名
  13. python双色球数据抓取及模拟生成高概率的号码
  14. 算法入门之lowB三人组---冒泡排序、选择排序、插入排序 【python版-详解】
  15. STM32MP157驱动开发——Linux IIO驱动(上)
  16. python实现自动点击桌面按钮_Python实现鼠标隔几秒自动点击电脑某区域
  17. 内卷、躺平与中年危机的相关思考
  18. P2918 [USACO08NOV]Buying Hay S(买干草)(ssl 2895)
  19. Android10读写权限
  20. 四元数绕某个轴旋转某度之后的得到的四元数+pcl使用总结

热门文章

  1. mysql innodb默认的锁_Mysql InnoDB锁
  2. css/css3总结(一)
  3. 一文带你快速了解Java中的【this引用】
  4. 解决IE浏览器与其它浏览器下载文件兼容问题(纯前端)
  5. 蓝桥杯:九进制转十进制
  6. 皮卡丘的梦想2(线段树+二进制状态压缩)
  7. Idea 插件:StackTrace to UML
  8. # CF451 - Devu and Flowers
  9. chromeF12 谷歌开发者工具详解 Network篇
  10. 游承超:手机贴膜,你真的选对了吗?(31P)