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

QBW114514 QBW114514 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#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;
}

 

...全文

相关推荐

政府科技管理者在推动科技成果转化过程中,如何精准识别重点产业的共性技术需求?.docx

政府科技管理者在推动科技成果转化过程中,如何精准识别重点产业的共性技术需求?

BIZKEEN

高校技术转移办公室人员如何高效管理并推广本校科技成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN

产业园区如何精准对接企业技术需求与高校科研成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN

不平衡电网下的svg无功补偿,级联H桥svg无功补偿statcom,采用三层控制策略(Simulink仿真实现)

内容概要:本文围绕不平衡电网条件下采用级联H桥结构的静止无功发生器(SVG/STATCOM)开展无功补偿技术的研究,提出了一种基于三层控制策略的系统化解决方案,并通过Simulink平台构建了完整的仿真模型进行验证。该方案以外环功率控制实现无功指令的精确生成,以中环电流控制提升动态响应能力,以内环调制控制确保输出波形质量,三层协同有效增强了系统在电压不平衡工况下的稳定性和补偿精度。文章系统阐述了主电路拓扑设计、数学建模、控制算法实现及仿真调试全过程,重点解决了负序电流抑制、三相功率平衡等关键技术难题,在高比例新能源接入导致电能质量恶化的现代电力系统中具有良好的应用前景; 适合人群:电气工程、自动化、电力电子与电力传动等相关专业的硕士博士研究生、从事电能质量治理与柔性输电技术研究的科研人员及工程技术人员; 使用场景及目标:①深入理解SVG在电网电压不平衡条件下的无功补偿机理与控制逻辑;②为级联H桥STATCOM的控制系统设计提供可复现的理论框架与仿真范例;③支撑柔性交流输电系统(FACTS)、智能电网与微电网电能质量提升等领域的科研攻关、项目开发与高水平论文撰写; 阅读建议:建议结合提供的Simulink仿真模型同步学习,重点剖析三层控制架构的信号流向与参数整定方法,对比SVC等传统补偿装置的性能差异,以深化对先进无功补偿技术优势与适用边界的认知。

欢多天天写代码

科技中介服务机构如何提升技术成果评估的专业性与效率?.docx

科技中介服务机构如何提升技术成果评估的专业性与效率?

BIZKEEN
评论
收藏 已收藏
分享
返回顶部