P3369 平衡树板子 Treap求调,58pts

QBW114514 2024-02-24 22:41:34
#include<bits/stdc++.h>
#define f(i,a,b) for(int i = a ; i<=b ; i++)
using namespace std;
const int N = 1e5+5;
int n,rt,op,x;
struct treap{
	int ls,rs;//左孩子,右孩子
	int key;//当前点的值
	int siz,pri;//子树大小,优先级 
}t[N]; 
int cnt;//总结点个数
void newnode(int x){//创建新节点。
    ++cnt;
    t[cnt].ls = t[cnt].rs = 0;
    t[cnt].key = x;
	t[cnt].siz = 1;
    t[cnt].pri = rand();
    return ;
}
#define l t[u].ls 
#define r t[u].rs 
void update(int u){
	t[u].siz = t[l].siz+t[r].siz+1;//合并siz数组 
	return ;
}
void rotate(int &u,int d){
	int k;
	if(!d){
		k = r;
		r = t[k].ls;
		t[k].ls = u;
	}else{
		k = l;
		l = t[k].rs;
		t[k].rs = u;
	}
	t[k].siz+=t[u].siz;//更新
	update(u);//合并siz 
	u = k;//更新u 
	return ; 
}
void insert(int &u,int x){//插入一个节点
    if(!u){//如果当前节点为空...
        newnode(x);//新建节点。
        u = cnt;//设置u。
        return;
    }
    t[u].siz++;//设置当前子树大小自增。
    if(t[u].key<=x){//如果当前节点的键值小于要插入的值...
        insert(r,x);//递归插入。
        if(t[u].pri<t[r].pri) rotate(u,0);//如果权值不满足要求,旋转。
    }
    else{//另一侧...
        insert(l,x);//递归。
        if(t[u].pri<t[l].pri) rotate(u,1);//旋转。
    }
    update(u);
	return; 
}
void del(int &u,int x){//删除元素...
    --t[u].siz;//siz自减。
    if(t[u].key==x){//如果删除的就是当前节点...
        if(!l&&!r){//如果当前节点是叶子...
            u = 0;//删除。
            return;
        }
        if(!l||!r){//如果只有一个子树...
            u = l+r;
            return;
        }
        if(t[l].pri<t[r].pri){//左儿子和右儿子权值...
            rotate(u,1);//旋转。
            del(r,x);//递归。
            return;
        }
        else{
            rotate(u,0);
            del(l,x);
            return;
        }
    }
    if(t[u].key<x) del(r,x);
    else del(l,x);
    update(u);
}
int rank1(int u,int x){
    if(!u) return 0;
    if(x>t[u].key) return t[l].siz+rank1(r,x)+1;
    return rank1(l,x);
}
int kth(int u,int k){
    if(t[l].siz == k-1) return t[u].key;
    else if(t[l].siz<k-1) return kth(r,k-t[l].siz-1);
    else return kth(l,k);
}
int pre(int u,int x){
    if(!u) return 0;
    if(t[u].key>=x) return pre(l,x);
    int tmp = pre(r,x);
    if(!tmp) return t[u].key;
    return tmp;
}
int post(int u,int x){
    if(!u) return 0;
    if(t[u].key<=x) return post(r,x);
    int tmp = post(l,x);
    if(!tmp) return t[u].key;
    return tmp;
}
int main(){
	srand(time(0));
	cin>>n;
	f(i,1,n){
		cin>>op>>x;
		if(op == 1) insert(rt,x);
		if(op == 2) del(rt,x);
		if(op == 3) cout<<rank1(rt,x)+1<<endl;
		if(op == 4) cout<<kth(rt,x)<<endl;
		if(op == 5) cout<<pre(rt,x)<<endl;
		if(op == 6) cout<<post(rt,x)<<endl;
	}
	return 0;
}

 

...全文
594 回复 打赏 收藏 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
下载代码方式:https://pan.quark.cn/s/edc2010ad9a6 ### H3C IMC Portal 认证操作手册关键知识点阐释 #### 一、Portal认证的介绍 **Portal认证**,英文表述为“入口”,在信息技术领域中特指一种利用Web界面核实用户身份的机制,其目的在于对用户的网络访问权限进行管理。在实施Portal认证的网络架构中,未完成认证的用户在尝试上网时会被强制导向一个特定的网址,该网址提供部分免费的网络服务。若用户希望获取更多的互联网资源,则必须通过Portal Web服务器所提供的界面完成身份验证流程。 #### 二、Portal认证系统的构成与作用 1. **系统构成**: - **接入设备**:承担检测用户是否已完成认证的责任,并根据认证结果执行相应的管理策略。 - **Portal Web服务器**:负责呈现认证界面以及处理用户的认证需求。 - **认证服务器**:通常指代RADIUS服务器,承担最终的用户身份核实职责。 2. **功能特点**: - **安全增强**:集成多种安全措施以保障用户数据及网络资源的完整性。 - **本地Portal Web服务器支持**:允许在本地环境中部署Portal Web服务器,以减少对外部服务的依赖性。 - **交互机制**:描述用户与系统之间的认证交互过程。 - **认证方式**:涵盖用户名密码验证等多种认证手段。 - **认证步骤**:详细说明认证的每一个环节,确保用户能够顺利完成身份核实。 - **过滤规范**:用于监管用户在网络中的行为模式。 - **BYOD支持**:实现Bring Your Own Device(自带设备)的认证功能,适应多元化的设备环境。 -...
代码转载自:https://pan.quark.cn/s/dda4d8b11acf 在线支付系统源代码与第三方支付平台构成了现代电子商务体系中不可或缺的组成部分,它们共同形成了数字交易的基础框架。本内容将详细剖析这些核心要素,并围绕相关主题展开一系列关联性知识点的论述。 首先,我们需要明确在线支付系统的概念。在线支付系统是指为消费者提供通过互联网购买商品或服务并完成安全支付操作的专用平台。此类系统通常整合了信用卡处理、电子钱包、银行直接转账等多种支付选项,旨在为用户创造流畅的购物环境。在构建在线支付系统时,保障交易安全、提升使用便捷度以及优化处理效率是必须优先考虑的关键要素。 其次,我们将探讨系统源代码的相关内容。源代码指的是由程序员采用人类可理解语言编写的应用程序基础指令集。对于编程初学者而言,研究在线支付系统的源代码是掌握此类系统开发方法的重要途径。通过分析源代码,开发者可以深入掌握支付流程中的各个关键环节,例如用户身份验证、交易请求处理、银行系统对接等操作。源代码的解读还能帮助开发者学习行业最佳实践,有效预防常见的安全隐患,包括数据库注入攻击和跨站脚本威胁。 再次,第三方支付系统作为另一种重要的支付模式值得关注。这类系统充当商家与消费者之间的中介角色,负责处理交易过程中的支付环节与清算工作。常见的第三方支付服务提供商包括支付宝、微信支付以及PayPal等知名平台。它们通过提供标准化的接口,使商家能够便捷地接入多元化支付渠道,同时通过实施额外的安全防护措施,如风险评估机制和反欺诈系统等,确保消费者在支付过程中的安全性。对于开发者而言,熟练掌握并整合第三方支付系统的应用程序接口(API)是实现在线支付功能的核心技能。 在进行在线支付系统开发时,开发者需要重...
内容概要:本文档介绍了M-PCIe(Mobile PCI Express)技术,这是一种将PCIe协议映射到M-PHY物理层的规范(ECN),旨在将高性能互连扩展至移动设备及其他对功耗敏感的应用场景。M-PCIe保留了PCIe的事务层、数据链路层和协议栈的完整性,仅对物理层逻辑进行优化适配,支持HS-G1至HS-G3高速速率以及PWM-G1低速模式,具备动态链路带宽重配置能力,可在运行时调整速率系列、高速档位和子链路宽度,且允许非对称链路宽度。文档详细阐述了M-PCIe的链路架构、符号编码、帧结构、时钟补偿、初始化流程、LTSSM状态机、HIBERN8低功耗机制及测试方法,并强调其实现需同时符合PCI-SIG与MIPI联盟标准。; 适合人群:从事高速接口设计、移动平台硬件开发或嵌入式系统研发的工程师,尤其是涉及PCIe与M-PHY集成的技术人员;具备数字电路、串行链路通信基础知识的研发人员。; 使用场景及目标:①理解如何在移动设备中实现高效能、低功耗的PCIe连接;②掌握M-PCIe链路初始化、带宽动态调节和低功耗状态切换的设计原理;③为开发兼容M-PCIe的芯片、模块或系统提供技术参考。; 阅读建议:此文档为技术规范类资料,建议结合MIPI M-PHY标准与PCIe基础规范对照学习,重点关注链路训练、状态机转换与时序参数定义,适用于芯片设计、固件开发与合规性测试阶段的工程实践。

3,093

社区成员

发帖
与我相关
我的任务
社区描述
本社区专注于分享Linux驱动和Kernel源码分析解读
linuxharmonyosubuntu 个人社区 北京·大兴区
社区管理员
  • Coder个人博客
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧