因为需要用到区间修改,所以该用splay(尚未填坑)或者无旋treap(刚刚填上)

最开始的建树用到了建笛卡尔树的方法,把id大于当前点的点不断出栈,又因为这道题的点是按序入栈的,所以当它无法让更多点出栈时,他就是栈首的右子树,而最后一个出栈的点,就是当前点的左子树。显然root=zhan[1]。

#include<stdio.h>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cmath>
#define inf 10000000
using namespace std;
int n,m;
struct treap
{treap* ch[2];int id,h,lazy,size;treap(){size=lazy=h=0;id=rand();ch[1]=ch[0]=NULL;}inline void update(){size=ch[0]->size+ch[1]->size+1;}
} *null=new treap(),*root=null,*zhan[100005],*x,*last;
typedef pair<treap*,treap*> D;
inline int read()
{int sum=0,f=1;char x=getchar();while(x<'0'||x>'9'){if(x=='-')f=-1;x=getchar();}while(x>='0'&&x<='9'){sum=sum*10+x-'0';x=getchar();}return sum*f;
}
inline treap* newtreap(int x)
{treap *o=new treap();o->size=1;o->h=x;o->ch[0]=o->ch[1]=null;return o;
}
void push(treap *f)
{if(f==null)return;if(f->lazy){f->lazy^=1;if(f->ch[0]!=null)f->ch[0]->lazy^=1;if(f->ch[1]!=null)f->ch[1]->lazy^=1;swap(f->ch[0],f->ch[1]);}
}
D split(treap *f,int k)
{if(f==null)return  D(null,null);push(f);D y;if(f->ch[0]->size>=k){y=split(f->ch[0],k);f->ch[0]=y.second;f->update();y.second=f;}else{y=split(f->ch[1],k-f->ch[0]->size-1);f->ch[1]=y.first;f->update();y.first=f;}    return y;
}
treap* merge(treap *a,treap *b)
{if(a==null)return b;if(b==null)return a;push(a);push(b);if(a->id<b->id){a->ch[1]=merge(a->ch[1],b);a->update();return a;}else{b->ch[0]=merge(a,b->ch[0]);b->update();return b;}
}
void dfs(treap *x)
{if(x==null)return;push(x);if(x->ch[0]!=null)dfs(x->ch[0]);printf("%d ",x->h);if(x->ch[1]!=null)dfs(x->ch[1]);
}
int yjn()
{freopen("sph.in","r",stdin);freopen("sph.out","w",stdout);scanf("%d%d",&n,&m);int p=0;for(int i=1;i<=n;i++){x=newtreap(i);last=null;while(p&&zhan[p]->id>x->id){zhan[p]->update();last=zhan[p];zhan[p--]=null;}if(p)zhan[p]->ch[1]=x;x->ch[0]=last;zhan[++p]=x;}while(p)zhan[p--]->update();root=zhan[1];int l,r;for(int i=1;i<=m;i++){l=read();r=read();D x=split(root,r);D y=split(x.first,l-1);if(y.second!=null)y.second->lazy^=1;root=merge(merge(y.first,y.second),x.second);}dfs(root);
}
int qty=yjn();
int main(){;}

转载于:https://www.cnblogs.com/QTY2001/p/7632748.html

无旋treap 文艺平衡树相关推荐

  1. 浅尝无旋Treap (基于洛谷P3391 文艺平衡树)

    说是浅尝吧,确实也挺浅的,完全是基于下面这道题写的↓ 洛谷P3391 自己去看题,我是懒得粘了... 分析 其实也没有什么好分析的,这就是一道Splay树的模板题,解决一般的Treap不能解决的区间维 ...

  2. luogu P2596 [ZJOI2006]书架(平衡树、无旋treap(按排名分裂)一些更复杂的操作)

    P2596 [ZJOI2006]书架 无旋treap可以维护一棵树的中序遍历结果.但是不支持通过编号来找节点.于是在无旋treap的基础上,我维护了每个节点的父亲,这样就可以求出一个节点是中序遍历中的 ...

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

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

  4. 模板:无旋treap

    文章目录 前言 操作 合并 分裂 插入 删除 查找第k大 查询x的排名 前驱后继 完整代码 所谓无旋treap,就是不带旋转的treap 前言 现在"理论上"我会四种平衡树了 之前 ...

  5. BST、AVL、BTree、B+Tree、B*Tree、23Tree、234Tree、TTree、RBTree、LLRBTree、AATree、SplayTree、Treap、无旋Treap、scap

    喜欢这篇文章吗?喜欢的话去看博主的置顶博客,即可依据分类找到此文章的原版得到更好的体验, 图片及代码显示的问题,笔者深感抱歉,想要更好的体验去原博文即可. title: tree mathjax: t ...

  6. 无旋Treap(fhq)

    一.Treap的性质 Treap就是集BST.Heap二者的性质于一身,即能够支持BST的操作,有能够保证Heap的深度.但BST和Heap的性质似乎有些矛盾,前者是左子树<根<右子树,后 ...

  7. P3369-[模板]普通平衡树【无旋Treap】

    正题 题目链接:https://www.luogu.com.cn/problem/P3369 题目大意 一个空可重集,要求支持 插入一个数xxx 删除一个数xxx 询问一个数xxx的排名 询问排名第x ...

  8. luogu P3850 [TJOI2007]书架(平衡树、无旋treap(按排名分裂))

    luogu P3850 [TJOI2007]书架 这里要的是字符串,所以我们最好用一个map映射一下,不要在结构体中用string代替val. fhq-treap中所有的排名实际上都指的是前面有多少个 ...

  9. P3835-[模板]可持久化平衡树【无旋Treap】

    正题 题目链接:https://www.luogu.com.cn/problem/P3835 题目大意 一个空可重集,要求支持 插入一个数xxx 删除一个数xxx 询问一个数xxx的排名 询问排名第x ...

最新文章

  1. JXJJOI2018_T1_market
  2. 如何利用离散Hopfield神经网络进行数字识别(1)
  3. Map集合的几种遍历方式
  4. 怎么检测mysql卸载完全_怎么检查mysql有没有删干净
  5. PHP:第四章——PHP数组array_diff计算数组差集
  6. 其实,这仅仅是个开始
  7. 使用Vue写一个登陆页面并在管理页面查看和修改
  8. Android上实现柱状图表
  9. 今晚直播丨有关Oracle 19c认证体系的一些变化及备考技巧
  10. java8 hadoop_java8-模拟hadoop
  11. python android自动化测试框架_appium+python搭建自动化测试框架_Tools安装(一)
  12. 使用 Azure Site Recovery 将内部部署虚拟化工作负荷迁移至 Azure
  13. 如何写一篇文献计量分析论文---citespace+vosviewer+文献计量在线分析平台
  14. 电视hdr测试软件,HDR+4K一个都不能少 本地资源播放测试
  15. 换行符CR,LF和CRLF
  16. Video Extractor监控视频侦查取证分析系统
  17. OpenNLP 自然语言处理工具
  18. 腾飞计算机学校怎么样,合肥腾飞职业技术学校怎么样
  19. 编程十年 (14):毁人不倦2
  20. LQR控制器——简单实现与仿真

热门文章

  1. 收货地址中加入智能识别地址大幅改善下单体验
  2. html关闭ios橡皮筋效果,JS禁止苹果iphone浏览器拖动反弹(橡皮筋效果)
  3. HI3556V200 Linux+Liteos双系统学习(2)----SDK简介
  4. 中国建设教育协会建筑八大员火热报名中,2021建筑八大员(机械员)模拟真题集及答案解析
  5. 海外抖音公会Tik Tok怎么申请?
  6. 【Linux】Ubuntu 20.04 报错 curl: (23) Failure writing output to destination 的解决方法
  7. 基于html5实现的推箱子小游戏
  8. Python Pymem 游戏内存基址读取修改 - 获取游戏DLL模块基址
  9. nie题目-游戏排行榜设计
  10. 远翔升压FP6277,内置MOS同步升压,单节锂电升压输出5V/3A