文艺平衡树FHQ-Treap-指针版

文艺平衡树 FHQ-Treap-指针版 代码存档

AC-C++11 385ms 9.09MB

AC-C++11 O2 394ms 9.23MB

貌似这玩意厌氧啊

/**************************************************************
* Problem: 3391(FHQ-Treap-pointer)
* Author: Vanilla_chan
* Date: 20210402
**************************************************************/
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<queue>
#include<vector>
#include<limits.h>
#define IL inline
#define re register
#define LL long long
#define ULL unsigned long long
#ifdef TH
#define debug printf("Now is %d\n",__LINE__);
#else
#define debug
#endif
#ifdef ONLINE_JUDGE
char buf[1<<23],* p1=buf,* p2=buf,obuf[1<<23],* O=obuf;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
#endif
using namespace std; template<class T>inline void read(T& x)
{
char ch=getchar();
int fu;
while(!isdigit(ch)&&ch!='-') ch=getchar();
if(ch=='-') fu=-1,ch=getchar();
x=ch-'0';ch=getchar();
while(isdigit(ch)) { x=x*10+ch-'0';ch=getchar(); }
x*=fu;
}
inline int read()
{
int x=0,fu=1;
char ch=getchar();
while(!isdigit(ch)&&ch!='-') ch=getchar();
if(ch=='-') fu=-1,ch=getchar();
x=ch-'0';ch=getchar();
while(isdigit(ch)) { x=x*10+ch-'0';ch=getchar(); }
return x*fu;
}
int G[55];
template<class T>inline void write(T x)
{
int g=0;
if(x<0) x=-x,putchar('-');
do { G[++g]=x%10;x/=10; } while(x);
for(int i=g;i>=1;--i)putchar('0'+G[i]);putchar('\n');
}
#define N 100010
struct Treap
{
struct node
{
node *ls,*rs;
int val,k,sze;
bool flag;
void upd()
{
sze=1;
if(ls) sze+=ls->sze;
if(rs) sze+=rs->sze;
}
node(int v)
{
ls=rs=0;
val=v;
sze=1;
k=rand();
upd();
}
void work()
{
flag^=1;
swap(ls,rs);
}
void spread()
{
if(flag)
{
if(ls) ls->work();
if(rs) rs->work();
flag=0;
}
}
}*root;
node *merge(node *x,node *y)
{
if(!x) return y;
if(!y) return x;
if(x->k<y->k)
{
x->spread();
x->rs=merge(x->rs,y);
x->upd();
return x;
}
else
{
y->spread();
y->ls=merge(x,y->ls);
y->upd();
return y;
}
}
int sss(node *x)
{
if(x) return x->sze;
return 0;
}
void split(node *i,int k,node *&x,node *&y)
{
if(!i)
{
x=y=0;
return;
}
i->spread();
if(sss(i->ls)<k)
{
x=i;
split(i->rs,k-sss(i->ls)-1,i->rs,y);
}
else
{
y=i;
split(i->ls,k,x,i->ls);
}
i->upd();
}
void out(node *x)
{
x->spread();
if(x->ls) out(x->ls);
cout<<x->val<<" ";
if(x->rs) out(x->rs);
}
}tree;
Treap::node *a,*b,*c;
int n,m;
int main()
{
n=read();
m=read();
for(int i=1;i<=n;i++)
{
tree.root=tree.merge(tree.root,new Treap::node(i));
}
for(int i=1,l,r;i<=m;i++)
{
l=read();
r=read();
tree.split(tree.root,l-1,a,b);
tree.split(b,r-l+1,b,c);
b->work();
tree.root=tree.merge(a,tree.merge(b,c));
}
tree.out(tree.root);
return 0;
}

文艺平衡树FHQ-Treap-指针版的更多相关文章

  1. 非旋treap (fhq treap) 指针版

    传送门 看了一圈,好像真的没什么用指针的呢.. 明明觉得指针很好看(什么??你说RE???听不见听不见) 其实我觉得用数组的话不RE直接WA调起来不是更困难嘛,毕竟通过gdb还可以知道哪里RE,WA就 ...

  2. P3391 【模板】文艺平衡树FHQ treap

    P3391 [模板]文艺平衡树(Splay) 题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转 ...

  3. 2021.12.08 平衡树——FHQ Treap

    2021.12.08 平衡树--FHQ Treap http://www.yhzq-blog.cc/fhqtreapzongjie/ https://www.cnblogs.com/zwfymqz/p ...

  4. Luogu P3835 【模板】可持久化平衡树(fhq Treap)

    P3835 [模板]可持久化平衡树 题意 题目背景 本题为题目普通平衡树的可持久化加强版. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作(对于各个以往的历史版本 ...

  5. 洛谷.3369.[模板]普通平衡树(fhq Treap)

    题目链接 第一次(2017.12.24): #include<cstdio> #include<cctype> #include<algorithm> //#def ...

  6. 洛谷.3391.文艺平衡树(fhq Traep)

    题目链接 //注意反转时先分裂r,因为l,r是针对整棵树的排名 #include<cstdio> #include<cctype> #include<algorithm& ...

  7. 洛谷.3835.[模板]可持久化平衡树(fhq treap)

    题目链接 对每次Merge(),Split()时产生的节点都复制一份(其实和主席树一样).时间空间复杂度都为O(qlogq).(应该更大些 因为rand()?内存真的爆炸..) 对于无修改的操作实际上 ...

  8. FHQ Treap及其可持久化与朝鲜树式重构

    FHQ Treap,又称无旋treap,一种不基于旋转机制的平衡树,可支持所有有旋treap.splay等能支持的操作(只有在LCT中会比splay复杂度多一个log).最重要的是,它是OI中唯一一种 ...

  9. 洛谷P5055 可持久化文艺平衡树 (可持久化treap)

    题目链接 文艺平衡树的可持久化版,可以使用treap实现. 作为序列使用的treap相对splay的优点如下: 1.代码短 2.容易实现可持久化 3.边界处理方便(splay常常需要在左右两端加上保护 ...

  10. 无旋Treap - BZOJ1014火星人 & 可持久化版文艺平衡树

    !前置技能&概念! 二叉搜索树 一棵二叉树,对于任意子树,满足左子树中的任意节点对应元素小于根的对应元素,右子树中的任意节点对应元素大于根对应元素.换言之,就是满足中序遍历为依次访问节点对应元 ...

随机推荐

  1. laravel-admin php artisan admin:install报错问题解决办法

    问题描述:根据laravel-admin官方文档安装步骤,执行:php artisan admin:install 安装时报错. 其实是数据库创建特殊字符过长问题,laravel 5.4 改变了默认的 ...

  2. GPU CPU运算时间测试

    GPU CPU运算时间测试 本文主要探讨GPU,CPU在做一些复杂运算的时间测试 实验任务 1.向量加法 两个相同维度的向量a,b做加法,分别测试GPU并行时间(包含数据拷贝时间),CPU串行时间. ...

  3. Ai满嘴顺口溜,想考研?浪费我几个小时

    Trae + claude3.7 事情的经过是这样的: 我有个方法代码如下: /// <summary> /// 获取客户端列表 /// </summary> /// < ...

  4. 【QT】Linux下安装QT开发环境

    Linux下安装QT开发环境 零.下载安装包 从以下网址可以下载QT的所有版本: https://download.qt.io/ 这次演示安装5.9.0版本,因为是长期支持的版本,所以进入到archi ...

  5. 分布式任务调度系统 xxl-job

    微服务难不难,不难!无非就是一个消费方,一个生产方,一个注册中心,然后就是实现一些微服务,其实微服务的难点在于治理,给你一堆 微服务,如何来管理?这就有很多方面了,比如容器化,服务间通信,服务上下线发 ...

  6. 把postgreSQL的表导入SQLite

    万能的互联网,一查一大堆废话,几乎搞不定.现将查到的资料结合实践概况如下,对不对也不清楚,反正可以跑了. 1.把PostgreSQL的表SQL语句复制出来 CREATE TABLE "mai ...

  7. 移除任务栏右端"显示桌面"按钮-AutoIt

    核心代码 $hwnd = WinGetHandle("[CLASS:Shell_TrayWnd]", "") ControlHide($hwnd, " ...

  8. python 工具uv

    以下是 Python 环境管理工具 uv 从入门到精通的系统性指南,基于 2025 年最新版本特性整理: 一.uv 核心优势与适用场景 极速性能 • 基于 Rust 开发,依赖解析速度比传统工具快 1 ...

  9. FastAPI依赖注入实践:工厂模式与实例复用的优化策略

    title: FastAPI依赖注入实践:工厂模式与实例复用的优化策略 date: 2025/04/06 01:22:25 updated: 2025/04/06 01:22:25 author: c ...

  10. 静态批处理/动态批处理/GPU Instancing /SRP Batcher的详细剖析

    静态批处理[1] 定义 标明为 Static 的静态物件,如果在使用相同材质球的条件下,在Build(项目打包)的时候Unity会自动地提取这些共享材质的静态模型的Vertex buffer和Inde ...