笛卡尔树就是你给两维限制,一维堆R,一维二叉搜索树K,平地拔起一棵Treap,最广范的应用:用LCA求区间最值,建Treap,还有个什么范围top k我表示并不会查都查不到。它最妙最高的地方在于用栈来建树:我们可以先排序K然后一个个插入,那么我们都是最右端,横容易被卡,那么我们不从上到下,我们从下到上,用栈维护,那就把时间复杂度从O(n^2)降到O(n),具体过程见下图从图一到图二就是这么一个过程,我们在把K为13的点插入时要找到一个合适的位置,上比他大,下比他小(假设大根堆)

下面见代码

#include<cstdio>
#include<algorithm>
#define MAXN 500010
using namespace std;
inline int read()
{
int sum=;
char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='')
{
sum=(sum<<)+(sum<<)+ch-'';
ch=getchar();
}
return sum;
}
struct Treap
{
int key,r;
Treap *ch[];
}*stack[MAXN],node[MAXN],*root;
int top;
int n;
int comp(const Treap a,const Treap b)
{
return a.key<b.key;
}
inline void Init()
{
n=read();
for(int i=;i<=n;i++)node[i].key=read();
for(int i=;i<=n;i++)node[i].r=read();
sort(node+,node+n+,comp);
}
inline void Build()
{
stack[++top]=node+;
for(int i=;i<=n;i++)
{
Treap *last=NULL;
while(top&&stack[top]->r>node[i].r)
last=stack[top--];
if(top)stack[top]->ch[]=node+i;
node[i].ch[]=last;
stack[++top]=node+i;
}
root=stack[];
}
void dfs(Treap *p)
{
if(!p)return;
printf("%d ",p->key);
dfs(p->ch[]);
dfs(p->ch[]);
}
int main()
{
int __size__=<<;
char *__p__=(char*)malloc(__size__)+__size__;
__asm__("movl %0, %%esp\n"::"r"(__p__));
freopen("treap.in","r",stdin);
freopen("treap.out","w",stdout);
Init();
Build();
dfs(root);
return ;
}

最新文章

  1. monkeyrunner之录制与回放(七)
  2. oracle的resetlogs机制浅析(转)
  3. HowTo:使用数据流读写消息
  4. myawr : mysql性能监控
  5. 转!!java中关键字volatile的作用
  6. Question store (Repeated review)
  7. SM30维护视图添加按钮
  8. ASP.NET 5概观 (ASP.NET 5 Overview)
  9. HTML5 Canvas动画效果演示
  10. 动态规划(区间DP):HDU 5115 Dire Wolf
  11. ExecuteScalar 要求已打开且可用的 Connection。连接的当前状态为已关闭。
  12. Linux企业级项目实践之网络爬虫(19)——epoll接口
  13. Java图形化界面设计——中间容器(Jpanel)
  14. 我的MYSQL学习心得(十二)
  15. Java之JSP基础语法
  16. spring-oauth-server实践:access_token的有效期分析
  17. PostgreSQL分页
  18. scp Permission denied
  19. visual studio 2019密钥
  20. Vue2学习笔记:计算属性(computed)

热门文章

  1. php柱状图多系列动态实现
  2. weui-switch开关控件,表单提交后如何取值
  3. Laravel-admin 当使用Form组件hasMany的时候 进行编辑出现错误 foreach错误的时候解决方案
  4. html+php上传图片文件到服务器
  5. Scrapy之CrawlSpider
  6. HyperLedger Fabric 1.4 超级账本项目(5.4)
  7. ABAP CDS ON HANA-(8)算術式
  8. WPF ItemsControl 手动刷新
  9. LeetCode:3.Longest Substring Without Repeating Characters
  10. 【jQuery】 常用函数