\(des\)

给定长度为 \(n\) 的数组,要求翻转一段区间 \([l, r]\) 使其升序排列。

要求 \(\sum r - l + 1 <= 2e7\)

\(sol\)

考虑快速排序,每次选择一个 \(mid\),把 \(<= mid\) 的数放大左边, \(>= mid\)

的数放到右边,递归下去。

把 \(<= mid\) 的数看做 \(0\), \(>= mid\) 的数看做 \(1\), 就相当于 \(0/1\) 序列排

序,类似归并排序,每次把左右两部分排好序,然后将其合并,对于 \(0/1\) 序列

而言,排好序等价于前面都是 \(0\), 后面都是 \(1\),这样的话,每次将左半边的

\(1\) 和右半边的 \(0\) 进行翻转。

\(code\)

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cctype>
#include <cstdlib> #define N 50005
using namespace std; int n, a[N], id[N]; void output(int l, int r) {
printf("%d %d\n", l, r);
for(; l < r; l ++, r --) swap(a[l], a[r]);
} int Msort(int l, int r, int val) {
if(l > r) return 0;
if(l == r) return a[l] < val;
int mid = (l + r) >> 1;
int a = Msort(l , mid , val) , b = Msort(mid + 1 , r , val);
if(l + a <= mid && mid + b <= r && b) output(l + a, mid + b);
return a + b;
} void Qsort(int l, int r, int L, int R) {
if(l >= r || L > R) return;
int mid = (L + R) >> 1, tmp;
tmp = Msort(l, r, mid);
Qsort(l, l + tmp - 1, L, mid - 1), Qsort(l + tmp, r, mid + 1, R);
} int main() {
scanf("%d", &n);
for(int i = 1; i <= n; i ++) scanf("%d", &a[i]);
Qsort(1, n, 0, 1000000000);
puts("-1 -1");
return 0;
}

noi.ac #32 快速排序归并排序应用的更多相关文章

  1. NOI.AC 32 Sort——分治

    题目:http://noi.ac/problem/32 从全是0和1的情况入手,可以像线段树一样分治下去,回到本层的时候就是左半部的右边是1,右半部的左边是0,把这两部分换一下就行.代价和时间一样是n ...

  2. [NOI.AC#32]sort 构造

    链接 50分做法(只有0,1) 根据归并排序的思想,假设我们现在已经把 \(l\dots mid\) 和 \(mid+1\dots r\) 排好序 只要把左边连续的1和右边连续的0翻转即可 inlin ...

  3. NOI.AC NOIP模拟赛 第一场 补记

    NOI.AC NOIP模拟赛 第一场 补记 candy 题目大意: 有两个超市,每个超市有\(n(n\le10^5)\)个糖,每个糖\(W\)元.每颗糖有一个愉悦度,其中,第一家商店中的第\(i\)颗 ...

  4. NOI.AC#2139-选择【斜率优化dp,树状数组】

    正题 题目链接:http://noi.ac/problem/2139 题目大意 给出\(n\)个数字的序列\(a_i\).然后选出一个不降子序列最大化子序列的\(a_i\)和减去没有任何一个数被选中的 ...

  5. configure.ac:32: error: possibly undefined macro: AC_DEFINE

    在ubuntu 下编译snappy时,在检查依赖关系时,处理autoconf的包时,在相关依赖包都已经安装的情况下,报如下错误,死活不过. configure.ac:32: error: possib ...

  6. # NOI.AC省选赛 第五场T1 子集,与&最大值

    NOI.AC省选赛 第五场T1 A. Mas的童年 题目链接 http://noi.ac/problem/309 思路 0x00 \(n^2\)的暴力挺简单的. ans=max(ans,xor[j-1 ...

  7. NOI.ac #31 MST DP、哈希

    题目传送门:http://noi.ac/problem/31 一道思路好题考虑模拟$Kruskal$的加边方式,然后能够发现非最小生成树边只能在一个已经由边权更小的边连成的连通块中,而树边一定会让两个 ...

  8. NOI.AC NOIP模拟赛 第五场 游记

    NOI.AC NOIP模拟赛 第五场 游记 count 题目大意: 长度为\(n+1(n\le10^5)\)的序列\(A\),其中的每个数都是不大于\(n\)的正整数,且\(n\)以内每个正整数至少出 ...

  9. NOI.AC NOIP模拟赛 第六场 游记

    NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...

随机推荐

  1. AQS(AbstractQueuedSynchronizer)

    AbstractQueuedSynchronizer 是一个锁框架.实现的原理(大概): 1.关于重入锁方面的实现,参考(手写一个可重入锁). 2.关于公平锁方面的实现,使用双链表的形式,进行公平锁的 ...

  2. JavaJDK多任务执行框架(六)

    class Temp extends Thread { public void run() { System.out.println("run"); } } public clas ...

  3. Eclipse 安装反编译插件 Eclipse Class Decompiler

    Eclipse Class Decompiler在线安装方法 https://blog.csdn.net/tangjinquan1157/article/details/77506015 Eclips ...

  4. MY SQL 两种安装方式

    MySQL基础知识-安装MySQL   前导: 昨天去参加了一个面试,公司不太大,是一家日资企业,在国内有几家分公司,面试官问到了MySQL的基本操作和性能优化,说了一大堆,倒是比较轻松的过了,但是面 ...

  5. Hibernate中Session.get()/load()之区别

    原文链接http://sunxin1001.iteye.com/blog/292090 Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象.其区 ...

  6. Manjaro 安装笔记

    双系统基本知识 [折腾日记]win10 ,ubuntu双系统安装避坑指南 Windows 下安装 Ubuntu 双系统(更新) rEFInd 总结注意点: 制作U盘启动盘一开始使用的是 Ulrstro ...

  7. 【转载】C#中可使用string.Empty代表空字符

    在C#中,如果赋值一个字符串为空白字符串,我们一般会用“”的形式对字符串进行赋值操作,其实在C#的字符串类String类中,有个专门的常量string.Empty来代表空字符串,可直接在赋值的时候使用 ...

  8. Django:ORM介绍

    1.ORM概念 ​ 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. ​ 简单的说,ORM是通过使用描述 ...

  9. 使用gulp构建项目

    gulp.js作为一个前端构建工具,类似于webpack.Grountjs.rollupjs,不过相对于其他几种打包工具,gulp的使用更轻量,配置更简单,打包速度更快,今天不说他们几个的区别,也不说 ...

  10. 【hbase】hbase-2.2.1配置独立的zookeeper的安装与测试

    下载hbase-2.2.1-bin.tar.gz并执行安装命令: [hadoop@hadoop01 ~]$ tar -zxvf hbase--bin.tar.gz 查看安装目录: [hadoop@ha ...