题目链接: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. GPL、BSD、MIT、Mozilla、Apache、LGPL开源协议介绍

    BSD开源协议 BSD开源协议是一个给于使用者很大自由的协议.基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布. 但”为所欲为”的前提当你发布使 ...

  2. curl模拟访问已经存在的cookie

    curl 'http://i.meituan.com/brunch/order?status=2' -H 'Pragma: no-cache' -H 'Accept-Encoding: gzip, d ...

  3. python输出有色记录

    一.第三方模块coloredlogs # Create a logger object. import logging logger = logging.getLogger('your-module' ...

  4. session_id()和session_regenerate_id()对原来session文件和其中数据是怎么处理的

    一.session_id()对原来session文件和里面的数据,是怎么处理的? 测验办法:<?php $sid = md5("aaad");session_id($sid) ...

  5. FastDFS特性及问题思考

    FastDFS是国人开发的一款分布式文件系统,目前社区比较活跃.系统中存在三种节点:Client.Tracker.Storage,在底层存储上通过逻辑的分组概念,使得通过在同组内配置多个Storage ...

  6. jqweui 关于$(document.body).infinite的bug

    jqweui,0.8.2版本infinite存在bug,会存在下拉不触发的情况,解决办法: 源代码3730行附近 Infinite.prototype.scroll = function() { va ...

  7. com.android.jack.CommandLine: Internal compiler error

    Android studio编译的时候出现错误: SEVERE: com.android.jack.CommandLine: Internal compiler error Error:Executi ...

  8. VMware vCenter Server 6.5配置群集功能

    虚拟数据中心是一种容器,其中包含用于操作虚拟机的完整功能环境所需要的全部清单对象.可以创建多个数据中心,以实际需求创建 . 群集是一组主机,将主机添加到群集时,主机的资源将成为群集资源的一部分,群集管 ...

  9. Jmeter在非GUI环境下传递参数(命令行&Jenkins配置)

    https://www.cnblogs.com/kill0001000/p/8078686.html 通过cmd运行 jmeter -? 可以得到所有命令行选项(本文最后) 其中可以看到下面 -J 的 ...

  10. Transaction rolled back because it has been marked as rollback-only分析解决方法

    1. Transaction rolled back because it has been marked as rollback-only事务已回滚,因为它被标记成了只回滚<prop key= ...