题目链接:https://www.luogu.org/problemnew/show/P1177

题意:输入 $n$ 以及后续 $n$ 个整数,让你将这 $n$ 个整数从小到大排序输出。

归并排序(用时: 121ms / 内存: 1568KB):

#include<bits/stdc++.h>
using namespace std;
const int maxn=+;
int n,a[maxn],t[maxn];
void Merge(int l,int m,int r)
{
int i=l,j=m+;
int k=l;
while(i<=m && j<=r)
{
if(a[i]>a[j]) t[k++]=a[j++];
else t[k++]=a[i++];
}
while(i<=m) t[k++]=a[i++];
while(j<=r) t[k++]=a[j++];
for(int i=l;i<=r;i++) a[i]=t[i];
}
void MergeSort(int l,int r)
{
if(l<r)
{
int m=(l+r)>>;
MergeSort(l,m);
MergeSort(m+,r);
Merge(l,m,r);
}
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
MergeSort(,n);
for(int i=;i<=n;i++) printf("%d%c",a[i],i==n?'\n':' ');
}

快速排序(用时: 117ms / 内存: 1040KB):

#include<bits/stdc++.h>
using namespace std;
const int maxn=+;
int n,a[maxn];
void QuickSort(int l,int r)
{
int i=l, j=r, p=a[rand()%(r-l+)+l];
while(i<=j)
{
while(a[i]<p) i++;
while(a[j]>p) j--;
if(i<=j) swap(a[i],a[j]), i++, j--;
}
if(l<j) QuickSort(l,j);
if(i<r) QuickSort(i,r);
}
int main()
{
srand(); scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
QuickSort(,n);
for(int i=;i<=n;i++) printf("%d%c",a[i],i==n?'\n':' ');
}

(很久以前的https://www.cnblogs.com/dilthey/p/6804152.html这篇随笔里写的快排,选最后一个元素做pivot被卡了QAQ,换一个)

FHQ-Treap(用时: 260ms / 内存: 2824KB):

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+; /******************************** FHQ Treap - st ********************************/
int root,nodecnt;
int ch[maxn][];
int key[maxn],dat[maxn];
int siz[maxn];
int NewNode(int val)
{
int x=++nodecnt;
key[x]=val, dat[x]=rand();
siz[x]=, ch[x][]=ch[x][]=;
return x;
}
void Pushup(int x) {
siz[x]=siz[ch[x][]]+siz[ch[x][]]+;
}
void Init()
{
root=nodecnt=;
key[]=dat[]=;
siz[]=, ch[][]=ch[][]=;
}
void Split(int x,int k,int &a,int &b)
{
if(x==)
{
a=b=;
return;
}
if(key[x]<=k) a=x, Split(ch[x][],k,ch[a][],b);
else b=x, Split(ch[x][],k,a,ch[b][]);
Pushup(x);
}
void Merge(int &x,int a,int b)
{
if(a== || b==)
{
x=a+b;
return;
}
if(dat[a]<dat[b]) x=a, Merge(ch[x][],ch[a][],b);
else x=b, Merge(ch[x][],a,ch[b][]);
Pushup(x);
}
/******************************** FHQ Treap - ed ********************************/ void Insert(int val)
{
int a=,b=;
Split(root,val,a,b);
Merge(a,a,NewNode(val));
Merge(root,a,b);
}
void Inorder(int rt)
{
if(rt==) return;
Inorder(ch[rt][]);
printf("%d ",key[rt]);
Inorder(ch[rt][]);
} int main()
{
int n;
scanf("%d",&n);
for(int i=,x;i<=n;i++)
{
scanf("%d",&x);
Insert(x);
}
Inorder(root);
}

(FHQ-Treap真是好写又好用QAQ!)

Luogu 1177 - 【模板】快速排序 - [快速排序][归并排序][无旋Treap]的更多相关文章

  1. Luogu 3369 / BZOJ 3224 - 普通平衡树 - [无旋Treap]

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3224 https://www.luogu.org/problemnew/show/P3 ...

  2. 模板 - 数据结构 - 可持久化无旋Treap/PersistentFHQTreap

    有可能当树中有键值相同的节点时,貌似是要对Split和Merge均进行复制的,本人实测:只在Split的时候复制得到了一个WA,但只在Merge的时候复制还是AC,可能是恰好又躲过去了.有人说假如确保 ...

  3. 洛谷 - P4567 - 文本编辑器 - 无旋Treap

    https://www.luogu.org/problem/P4567 事实证明无旋Treap是不是不可能会比Splay快? #include<bits/stdc++.h> using n ...

  4. 洛谷 - P3391 【模板】文艺平衡树(Splay) - 无旋Treap

    https://www.luogu.org/problem/P3391 使用无旋Treap维护序列,注意的是按顺序插入的序列,所以Insert实际上简化成直接root和Merge合并,但是假如要在序列 ...

  5. 无旋treap的简单思想以及模板

    因为学了treap,不想弃坑去学splay,终于理解了无旋treap... 好像普通treap没卵用...(再次大雾) 简单说一下思想免得以后忘记.普通treap因为带旋转操作似乎没卵用,而无旋tre ...

  6. 模板 - 无旋Treap

    一般而言作为一棵平衡树只需要插入,删除,值求排名,排名求值,前驱,后继,六个接口. #include<bits/stdc++.h> using namespace std; typedef ...

  7. 【算法学习】Fhq-Treap(无旋Treap)

    Treap——大名鼎鼎的随机二叉查找树,以优异的性能和简单的实现在OIer们中广泛流传. 这篇blog介绍一种不需要旋转操作来维护的Treap,即无旋Treap,也称Fhq-Treap. 它的巧妙之处 ...

  8. HNOI2012 永无乡 无旋Treap

    题目描述 永无乡包含 nnn 座岛,编号从 111 到 nnn ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 nnn 座岛排名,名次用 111 到 nnn 来表示.某些岛之间由巨大的桥连接, ...

  9. 浅谈无旋treap(fhq_treap)

    一.简介 无旋Treap(fhq_treap),是一种不用旋转的treap,其代码复杂度不高,应用范围广(能代替普通treap和splay的所有功能),是一种极其强大的平衡树. 无旋Treap是一个叫 ...

随机推荐

  1. linux服务器挂掉自动重启脚本(转)

    实现原理主要是使用linux提供的crontab机制,定时查询服务器进程是否存在,如果宕机则执行我们预设的重启脚本. 首先我们要向crontab加入一个新任务 sudo crontab -e #进入编 ...

  2. REST API 调用 方法

    METHOD      DESCRIPTION GET         Retrieves the specified resource POST        Creates a resource ...

  3. lsof详解

    from:https://www.cnblogs.com/the-study-of-linux/p/5501593.html lsof (list open files)是一个列出当前系统打开文件的工 ...

  4. PDO::__construct(): Server sent charset (255) unknown to the client. Please, report to the developers

    微擎出错信息: Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2054] Server s ...

  5. 生产环境CPU过高问题定位

    问题描述:       生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 解决过程: 1.根据top命令,发现 ...

  6. Atitit s2018.2 s2 doc list on home ntpc.docx  \Atiitt uke制度体系 法律 法规 规章 条例 国王诏书.docx \Atiitt 手写文字识别 讯飞科大 语音云.docx \Atitit 代码托管与虚拟主机.docx \Atitit 企业文化 每日心灵 鸡汤 值班 发布.docx \Atitit 几大研发体系对比 Stage-Gat

    Atitit s2018.2 s2 doc list on home ntpc.docx \Atiitt uke制度体系  法律 法规 规章 条例 国王诏书.docx \Atiitt 手写文字识别   ...

  7. Web API 异常处理

    Web Api的ExceptionFilter只能截获并处理Action执行过程中发生的异常,在Action执行过程之外如果出现异常,ExceptionFilter是无能为力的. 这些异常包括: 1. ...

  8. hdoj:2085

    核反应堆 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  9. 【转】WPF自定义控件与样式(12)-缩略图ThumbnailImage /gif动画图/图片列表

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要针对WPF项目 ...

  10. 转:十步完全理解SQL

    来自:http://blog.jobbole.com/55086/ 很多程序员视 SQL 为洪水猛兽.SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言.面向对象的程序语 ...