整理的算法模板合集: ACM模板



我们把每个查询区间使用solit分裂成[1l−1][lr][r+1n][1~l-1][l~r][r+1~n][1 l−1][l r][r+1 n]三个区间。

再把[lr][l~r][l r]区间的根节点标记lazetage,三个区间合并时pushdown更新,我们要求整个区间实现翻转,可以直接交换左右儿子即可,因为整棵树是一个严格的小根堆,满足小根堆的性质。

一次编译一次过真爽

/*平衡树实际上画出来是一颗乱糟糟的小根堆,但是满足小根堆的性质,
所以我们这里区间翻转,找到区间需要按照排名split,
只需要在这个区间里一直交换左右儿子即可实现区间翻转*/
#include<cstdio>
#include<iostream>
#include<algorithm>using namespace std;const int N = 500007;int n, m, root;namespace treap{int n, m, tot;struct tree{int l, r;int fix;int val;int size;int lz;}tr[500007];inline int get_node(int v){tr[++ tot].val = v;tr[tot].size = 1;tr[tot].fix = rand();return tot;}void pushdown(int p)//下传懒标记,注意先交换,再下传{if(tr[p].lz){swap(tr[p].l, tr[p].r);tr[tr[p].l].lz ^= 1;tr[tr[p].r].lz ^= 1;tr[p].lz = 0;}}void pushup(int p){tr[p].size = tr[tr[p].l].size + tr[tr[p].r].size + 1;}void split(int p, int rnk, int &x, int &y){if(!p){x = y = 0;return ;}pushdown(p);//合并左边,往右边走if(tr[tr[p].l].size + 1 <= rnk)x = p,split(tr[p].r, rnk - tr[tr[p].l].size - 1, tr[p].r, y);else y = p, split(tr[p].l, rnk, x, tr[p].l);pushup(p);}int merge(int x, int y){if(!x || !y)return x + y;if(tr[tr[x].l].fix < tr[tr[y].l].fix){pushdown(x);tr[x].r = merge(tr[x].r, y);pushup(x);return x;}else {pushdown(y);tr[y].l = merge(x, tr[y].l);pushup(y);return y;}}void print(int p)//必须要中序遍历才能输出答案{pushdown(p);if(tr[p].l)//左print(tr[p].l);printf("%d ",tr[p].val);//中if(tr[p].r)//右print(tr[p].r);}
}int main()
{scanf("%d%d", &n, &m);for(int i = 1; i <= n; ++ i){root = treap::merge(root, treap::get_node(i));}for(int i = 1, l, r, x, y, p; i <= m; ++ i){scanf("%d%d", &l, &r);treap::split(root, r, x, y);treap::split(x, l - 1, x, p);treap::tr[p].lz ^= 1;root = treap::merge(treap::merge(x, p), y);}treap::print(root);return 0;
}

luogu P3391 【模板】文艺平衡树(FHQ - treap,懒惰标记)相关推荐

  1. 文艺平衡树(Fhq Treap)

    传送门:文艺平衡树 首先要阐述一点,Fhq Treap的按大小分裂是支持区间操作的,而按值分裂是不支持区间操作的. Fhq Treap的分裂方式: 按权值分裂 按大小分裂 按权值分裂: 根据插入点的权 ...

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

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

  3. fhq_treap || BZOJ 3223: Tyvj 1729 文艺平衡树 || Luogu P3391 【模板】文艺平衡树(Splay)...

    题面: [模板]文艺平衡树(Splay) 题解:无 代码: 1 #include<cstdio> 2 #include<cstring> 3 #include<iostr ...

  4. 模板 - FHQ - treap 无旋平衡树

    整理的算法模板合集: ACM模板 目录 FQH - treap 无旋平衡树 按权值分裂 按排名分裂 文艺平衡树 可持久化序列 FQH - treap 无旋平衡树 operator 1 : 插入一个数 ...

  5. [洛谷P3391] 文艺平衡树 (Splay模板)

    初识splay 学splay有一段时间了,一直没写...... 本题是splay模板题,维护一个1~n的序列,支持区间翻转(比如1 2 3 4 5 6变成1 2 3 6 5 4),最后输出结果序列. ...

  6. luoguP5055 【模板】可持久化文艺平衡树 可持久化非旋转treap

    luoguP5055 [模板]可持久化文艺平衡树 可持久化非旋转treap 好题. Code: #include<bits/stdc++.h> using namespace std; # ...

  7. 【luogu P5055】【模板】可持久化文艺平衡树

    [模板]可持久化文艺平衡树 题目链接:luogu P5055 题目大意 要你维护插入,删除,区间翻转,区间求和. 但要求可持续化,即每次操作在一个历史版本上进行,且会产生一个新的历史版本 思路 看到题 ...

  8. 洛谷 P3391 【模板】文艺平衡树

    题目背景 这是一道经典的Splay模板题--文艺平衡树. 题目描述 您需要写一种数据结构,来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4 ...

  9. 三大平衡树(Treap + Splay + SBT)总结+模板

    Treap树 核心是 利用随机数的二叉排序树的各种操作复杂度平均为O(lgn) Treap模板: #include <cstdio> #include <cstring> #i ...

  10. P5055 【模板】可持久化文艺平衡树 可持久化fhqtreap

    P5055 [模板]可持久化文艺平衡树 链接 luogu 思路 可持久化fhq-treap套一套就行了,pushdown和split都要可持久化,但merge不用可持久.以前以为很难一直没看,就是个板 ...

最新文章

  1. Nature:拟南芥根系微生物组的结构
  2. 基础二(格式化字符串、运算符和编码)
  3. Avalonia跨平台入门第十三篇之Expander控件
  4. web---SSL/TSL
  5. CS231n课程笔记5.4:超参数的选择交叉验证
  6. 使用java反射写一个通用的jdbc查询
  7. mysql触发器预约实例_Mysql触发器实例分析
  8. 深入浅出H桥驱动电路
  9. html设置鼠标指针的形状,CSS/HTML改变鼠标指针形状方法 属性说明
  10. 【产品】产品设计:美工线的设计
  11. SAPGUI 里 F1 功能键的用法专题讲解试读版
  12. 解题笔记(39)——过河问题
  13. 推荐系统的评价指标笔记(NDCG、MAP、AUC、HR、MRR)
  14. 【神经网络架构】Swin Transformer细节详解-1
  15. 计算机信息技术基础...,计算机信息技术基础
  16. 数据可视化大屏(柱状图、条形图、情感分析饼图、地域图、词云图、数据表格图、涟漪散点图)
  17. 软件测试工程师职业发展路线简介
  18. 第7课 产品经理专业技能之 PRD/BRD/MRD文档撰写
  19. Verilog 简易寄存器
  20. 智能合约场景下的模糊测试——智能合约基本介绍

热门文章

  1. 关于Silverlight_Tools.exe安装不上的问题
  2. MySQL 里的 Timestrap 和 DateTime 和 Java 中的 Date
  3. 教您如何查看MySQL用户权限
  4. Java虚拟机性能监控工具草览
  5. Generic Data Access Layer泛型的数据访问层
  6. puppet中master和agent之间实现通信
  7. 如何利用客户端在CU发博客
  8. mac redies install
  9. “元宇宙”数字化理解
  10. 利用python爬虫与数据分析,打造最强玩法,轻松成为大神级玩家!