noi.ac #32 快速排序归并排序应用
\(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 快速排序归并排序应用的更多相关文章
- NOI.AC 32 Sort——分治
题目:http://noi.ac/problem/32 从全是0和1的情况入手,可以像线段树一样分治下去,回到本层的时候就是左半部的右边是1,右半部的左边是0,把这两部分换一下就行.代价和时间一样是n ...
- [NOI.AC#32]sort 构造
链接 50分做法(只有0,1) 根据归并排序的思想,假设我们现在已经把 \(l\dots mid\) 和 \(mid+1\dots r\) 排好序 只要把左边连续的1和右边连续的0翻转即可 inlin ...
- NOI.AC NOIP模拟赛 第一场 补记
NOI.AC NOIP模拟赛 第一场 补记 candy 题目大意: 有两个超市,每个超市有\(n(n\le10^5)\)个糖,每个糖\(W\)元.每颗糖有一个愉悦度,其中,第一家商店中的第\(i\)颗 ...
- NOI.AC#2139-选择【斜率优化dp,树状数组】
正题 题目链接:http://noi.ac/problem/2139 题目大意 给出\(n\)个数字的序列\(a_i\).然后选出一个不降子序列最大化子序列的\(a_i\)和减去没有任何一个数被选中的 ...
- configure.ac:32: error: possibly undefined macro: AC_DEFINE
在ubuntu 下编译snappy时,在检查依赖关系时,处理autoconf的包时,在相关依赖包都已经安装的情况下,报如下错误,死活不过. configure.ac:32: error: possib ...
- # NOI.AC省选赛 第五场T1 子集,与&最大值
NOI.AC省选赛 第五场T1 A. Mas的童年 题目链接 http://noi.ac/problem/309 思路 0x00 \(n^2\)的暴力挺简单的. ans=max(ans,xor[j-1 ...
- NOI.ac #31 MST DP、哈希
题目传送门:http://noi.ac/problem/31 一道思路好题考虑模拟$Kruskal$的加边方式,然后能够发现非最小生成树边只能在一个已经由边权更小的边连成的连通块中,而树边一定会让两个 ...
- NOI.AC NOIP模拟赛 第五场 游记
NOI.AC NOIP模拟赛 第五场 游记 count 题目大意: 长度为\(n+1(n\le10^5)\)的序列\(A\),其中的每个数都是不大于\(n\)的正整数,且\(n\)以内每个正整数至少出 ...
- NOI.AC NOIP模拟赛 第六场 游记
NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...
随机推荐
- ColorTransform调整显示对象的颜色值
ColorTransform调整显示对象的颜色值: /** * * *------------------------------* * | *** 调整显示对象的颜色值 *** | * *----- ...
- Matalb中英双语手册-年少无知翻译版本
更新: 20171207: 这是大学期间参加数模翻译的手册 正文: 愚人节快乐,突然发现自己在博客园的一篇文章.摘取如下: MATLAB 语言是一种工程语言,语法很像 VB 和 C,比 R 语言容易学 ...
- 1.ASP.NET Core介绍
优点: 1.跨平台,高性能,开源,运行在.Net Core 或.Net Framework框架上(asp.net core 3.0及以后只支持.Net Core). 2.各平台上开发工具支持,能够开发 ...
- Python简单实现在线更新下载
Python简单实现 软件在线更新 在线下载(Python simple implementation of software online update and download) 文章来自:htt ...
- NSLog的各种打印格式符和打印CGRect相关结构体
1.打印CG开头的数据类型,如CGRect,CGSize等方法 1.1 打印CGRect : NSLog(@"%@", NSStringFromCGRect(someCGRect) ...
- MySQL Network--域名与VIP
VIP与域名1.域名能在多个IDC切换,而VIP通常在特定网段内切换.2.VIP切换可以立即生效,而域名切换存在一定时间延迟. DNS解析顺序:1.查询本地域名映射配置(/etc/hosts)2.查查 ...
- Oracle Drop Table
DROP TABLE 使用DROP TABLE语句将表或对象表移动到回收站或从数据库中完全删除表及其所有数据. 注:除非指定purge子句,否则drop table语句不会将表占用的空间释放回表空间供 ...
- 02- web-mini框架添加路由、MySQL(二)
本篇在上篇的基础上为其增设路由功能,同时将上篇中的数据库中数据备份添加进去. 一.装饰器 在之前有介绍过为一个函数不改变源代码不改变原函数的调用方式下为其增设附加功能,需要用到装饰器,而在该上篇的we ...
- (多核DSP快速入门)SYS/BIOS入门
(多核DSP快速入门)SYS/BIOS入门 原创文章 转载请注册来源http://blog.csdn.net/tostq 系列教程目录:http://blog.csdn.net/tostq/art ...
- 浅谈CopyOnWriteArraySet
CopyOnWriteArraySet结构图 CopyOnWriteArraySet.png CopyOnWriteArraySet主要方法 public boolean add(E e); pu ...