[COGS 2421] [HZOI 2016] 简单的Treap 笛卡尔树

本文详细介绍了笛卡尔树的构建原理及Treap的数据结构,重点讲解了如何使用栈来优化笛卡尔树的构建过程,从而降低时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

笛卡尔树就是你给两维限制,一维堆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=0;
  char ch=getchar();
  while(ch<'0'||ch>'9')ch=getchar();
  while(ch>='0'&&ch<='9')
  {
    sum=(sum<<1)+(sum<<3)+ch-'0';
    ch=getchar();
  }
  return sum;
}
struct Treap
{
  int key,r;
  Treap *ch[2];
}*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=1;i<=n;i++)node[i].key=read();
  for(int i=1;i<=n;i++)node[i].r=read();
  sort(node+1,node+n+1,comp);
}
inline void Build()
{
   stack[++top]=node+1;
   for(int i=2;i<=n;i++)
   {
      Treap *last=NULL;
      while(top&&stack[top]->r>node[i].r)
       last=stack[top--];
      if(top)stack[top]->ch[1]=node+i;
      node[i].ch[0]=last;
      stack[++top]=node+i;
   }
   root=stack[1];
}
void dfs(Treap *p)
{
  if(!p)return;
  printf("%d ",p->key);
  dfs(p->ch[0]);
  dfs(p->ch[1]);
}
int main()
{
    int __size__=128<<20;
    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 0;
}

 

转载于:https://www.cnblogs.com/TSHugh/p/7242090.html

内容概要:本文详细探讨了基于MATLAB/SIMULINK的多载波无线通信系统仿真及性能分析,重点研究了以OFDM为代表的多载波技术。文章首先介绍了OFDM的基本原理和系统组成,随后通过仿真平台分析了不同调制方式的抗干扰性能、信道估计算法对系统性能的影响以及同步技术的实现与分析。文中提供了详细的MATLAB代码实现,涵盖OFDM系统的基本仿真、信道估计算法比较、同步算法实现和不同调制方式的性能比较。此外,还讨论了信道特征、OFDM关键技术、信道估计、同步技术和系统级仿真架构,并提出了未来的改进方向,如深度学习增强、混合波形设计和硬件加速方案。; 适合人群:具备无线通信基础知识,尤其是对OFDM技术有一定了解的研究人员和技术人员;从事无线通信系统设计与开发的工程师;高校通信工程专业的高年级本科生和研究生。; 使用场景及目标:①理解OFDM系统的工作原理及其在多径信道环境下的性能表现;②掌握MATLAB/SIMULINK在无线通信系统仿真中的应用;③评估不同调制方式、信道估计算法和同步算法的优劣;④为实际OFDM系统的设计和优化提供理论依据和技术支持。; 其他说明:本文不仅提供了详细的理论分析,还附带了大量的MATLAB代码示例,便于读者动手实践。议读者在学习过程中结合代码进行调试和实验,以加深对OFDM技术的理解。此外,文中还涉及了一些最新的研究方向和技术趋势,如AI增强和毫米波通信,为读者提供了更广阔的视野。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值