我的主席树

主席树模板总结及题集 介绍篇:http://blog.youkuaiyun.com/metalseed/article/details/8045038  -> 理解篇(配图比较生动):http://blog.youkuaiyun.com/regina8023/article/details/41910615  -> 题目:poj2104 区间查询第k大元素,非递归写法,非递归不好进行回溯操作,递归更好写一些 #include #inc 阅读详情

闲言少叙

主席树,故名思意由某个主席创造,(YY一下)

线段树 + 预处理 区间和 ,我写了个静态的,没什么太难的

还是直接发放代码

#include<iostream>
#include<algorithm>
using namespace std;
#define f(i,l,r) for(int i=l;i<=r;++i)
#define g(i,l,r) for(int i=l;i>=r;--i)
const int N = 1e5 + 10;
int cnt;
int n,m;
//对应序列 离散后的id 和大小顺序
int ranArr[N];
struct Node{
	int l,r;
	int sum;
}Tree[N<<5];
int root[N];//存储线段树的根节点

/* 存储原数据结构体 x原数据 id 离散化之前坐标位置*/
struct v{   
	int x;
	int id;
}value[N];
bool cmp(v l ,v r){
	return l.x<r.x;
}

void init(){
	cnt =1;
	root[0]=0;
	Tree[0].l=Tree[0].r=Tree[0].sum=0;
}
//update(ranArr[i], root[i], 1, n);
void update(int num,int& rt ,int l,int r){
	Tree[cnt++]=Tree[rt];
	rt=cnt-1;
	Tree[rt].sum++;
	if(l==r) return ;
	int m=(l+r)>>1;
	if(num< m )	update(num,Tree[rt].l,1,m);
	else	update(num,Tree[rt].r,m|1,r); 
}
//query(root[l-1],root[r],k,i,n)
int query(int i,int j,int k,int l,int r){
	int range = Tree[Tree[j].l].sum -Tree[Tree[i].l].sum ;
	if(l==r) return l;
	int m = (l+r)>>1;
	if(k<=range) return query(Tree[i].l,Tree[j].l,k,i,m);
	else return query(Tree[i].r,Tree[j].r,k-range,m|1,r);
}

int main(){
	cin>>n>>m;
	//输入 数据 
	f(i,1,n) cin>>value[i].x, value[i].id =i;
	//离散化操作
	sort(value+1,value+n+1,cmp);
	
	f(i,1,n)ranArr[value[i].id]=i;
 
	//静态创建
	init();
	f(i,1,n)
	{
		root[i]=root[i-1];
		update(ranArr[i], root[i], 1, n);
	}

	//只进行查询
	int l,r,k;
	f(i,1,m)
	{
		cin>>l>>r>>k;
		cout<<value[query(root[l-1],root[r],k,i,n)].x<<endl;
	}


	return 0;
}


动态主席树 写在前面 相对于静态主席树,动态主席树意味着,每个节点可能会修改称为新的值,按照我们平时的想法,一定是在之前要删除的位置上进行-1操作,然后再新插入的位置上+1 解析 静态主席树我们在每个节点处创建一个权值线段树,然后在区间[l,r]求解时,使用第r棵线段树 - 第l-1棵线段树,在这个线段树上进行查询第k大元素的离散位置,然后根据之前进行离散的结果,得到最终的位置 使用ZOJ-2112作... 阅读详情

相关推荐

锐捷交换机堆叠配置举例

一、组网需求: 1)四台S2628G进行堆叠; 2)设备在堆叠前先设置好优先级; 3)使用光口堆叠的设备如RG-S2928G-E相关配置 二、组网拓扑 三、配置要点: 普通堆叠设备不需要配置,只要把堆叠模块和线缆连接好即可 堆叠模块不支持热插拔,即插在模块连上线缆后不能立即生效,需要重启设备才生效。 如果拔掉堆叠插槽后,想再插上模块堆叠,那么必须重启设备才生效 设备堆叠需要协商参数,时间会比较久,请耐心等待 堆叠时设备建议是...

dongsheng_9234的专栏 8287

主席树简介及应用

【主席树简介】 主席树,即可持久化线段树,又称函数式线段树,是重要的可持久化数据结构之一。所谓可持久化,是指可以回溯到历史版本。 主席树的本质,就是在有数据更新时,在基准线段树的基础上采用“结点复用”的方式仅仅增加少量结点来维护历史数据,而不是通过存储不同版本线段树的方式来维护历史数据,从而达到减少时空消耗的目的,避免出现TLE(Time Limit Exceeded)及MLE(Memory Limit Exceeded)错误。主席树空间一般建议是开n<<5(n为基准线段树的结点数)。 如在..

hnjzsyjyj的专栏 3313

RADIOML 2018.01A数据集在自动调制识别中的实战应用指南

本文提供了RADIOML 2018.01A数据集在自动调制识别(AMR)任务中的完整实战指南。内容涵盖从数据集介绍、数据获取与解包、高效预处理流程,到构建PyTorch数据管道、模型设计(如1D CNN、ResNet)以及训练调参策略。重点阐述了如何利用该数据集训练鲁棒的AI模型,以应对复杂信道环境和低信噪比挑战,并给出了详细的性能评估方法。

plant的博客 174

可持久化数据结构-线段树(主席树)

可持久化线段树的概念和简单运用

zje11的博客 2741

乐鑫WIFI芯片开发流程梳理-工具链、编译和下载

最近开始基于乐鑫ESP32的WIFI模组的软件开发,首先要做整套流程的梳理,乐鑫官网以及安信可上已经有了较为系统的资料,但是在实现过程中也遇到了一些问题,花了几天去解决,所以为了总结,也为了给其他人提供一些借鉴,把流程分享一下,官网上相对比较完善的,就不在赘述。 1. 开发方案选择 目前网上有两套较为成熟的方案: (1)基于乐鑫官网推荐的开发方式,原网页:https://docs.espress...

一名嵌入式软件工程师的自我成长 3926

SAP 屏幕增强:客户商主数据屏幕增强(KNA1、KNB1、KNVV)

本文介绍了SAP系统中针对客户主数据(KNA1、KNB1、KNVV)进行屏幕增强的具体实现方法。主要内容包括:1)在SPRO配置中创建新条目;2)通过SE80创建函数组和程序(LZKNA1TOP等);3)设置子屏幕9001并添加自定义结构字段;4)利用BADI(CUSTOMER_ADD_DATA等)实现数据交互逻辑。文章分别详细说明了针对客户主数据的一般数据(KNA1)、公司代码数据(KNB1)和销售数据(KNVV)三类不同数据的增强配置步骤,包括函数模块创建、屏幕设置和BADI方法调用等关键技术点。

SAP ABAP开发技能记录分享 1617

主席树&树状数组套主席树

主席树是一种利用前缀和维护形如(l主席树的最经典应用是维护区间第k小值,大体思路是维护root[r]-root[l-1]范围内的线段树,用各种方法乱搞。带修改:高能的树状数组套主席树(更疯狂的nlog^2(n)的空间复杂度)。树状数组的每一个节点维护的是一段区间,我们将这每一个区间建成一颗线段树(利用主席树降一点内存和时间)。这时候修改只需要修改logn个线段树即可,时间复杂度log^2(n)。注

heheda_is_an_OIer的博客 1340

基于51单片机的校园一卡通系统(仿真)

本次设计利用LCD1604设计可视化界面,矩阵按键执行交互,继电器模拟门的开关,系统集成考勤系统、门禁系统、消费系统、充值系统。同时利用LED灯、蜂鸣器进行指示,方便用户查看状态。

MGT_9796的博客 1554

主席树简单应用

众所周知,可持久化线段树(即主席树)的原理是利用之前已经建好的线段树节点来建新的线段树,从而达到节省空间的目的。下面来说说两个最经典的应用。静态区间第k大 建可持久化权值线段树,利用前缀和的思想,在询问的时候只需要用val[r]-val[l]来判断往左儿子走还是右儿子走即可。 利用主席树加上一个BIT可以做到动态区间第k大静态区间元素种类数 建可持久化线段树,每一棵线段树上,对于每一种元素,保存到他最后出现的位置上(这样的思想以后还会经常运用),即加入新元素时,将他原来出现的位置-1,将新位置+1(这样就考

zbhruarua的博客 249

别再让 AI 瞎写 SAP 代码了!这套 Claude Code Skill 的验证机制才是关键

本文深入解析了专为SAP CAP开发设计的AI辅助工具sap-cap-capire的技术架构。该工具采用四层设计:协议层集成MCP和LSP实现实时模型访问与语法检查;智能层通过4个专业化Agent(数据建模、服务开发等)分工协作;验证层确保代码质量;知识层存储文档模板。这种工程化设计解决了通用AI在CAP开发中面临的上下文不足、专业性缺失和代码质量保证等核心问题,通过本地化服务和实时反馈机制显著提升了开发效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 882

C# WPS操作PPT,全屏,缩率图,备注,跳转播放

本文介绍了一个使用C#开发的PPT操作工具,主要功能包括检测当前打开的PPT文件、获取选中PPT路径、指定播放PPT、获取PPT页面序号和缩略图、提取备注内容等。文章展示了操作界面效果图,并重点解决了用户手动退出PPT后重新获取路径时报错的问题。核心代码实现了通过WPS API进行PPT文件的打开、全屏播放、页面跳转、获取当前页位置等功能,同时支持生成PPT缩略图预览和备注信息提取。当用户未通过工具按钮打开PPT时,程序会自动初始化PPT信息确保功能正常使用。

遇见--专栏 311

最详细的讲解,让你一次学会主席树

好久以前就想学习主席树这个黑科技,一直觉得很难,然后平时上课也没有什么好的时间,所以一直搁置到现在,最近遇到了一个比较简单,比较经典的问题,求区间第k小,比如poj2104,没有更新操作,只有查询操作,因为最近一直在学习分块思想,既然没有更新操作,我觉得可以用分块搞一下,但是一直tle,我的大致思想是把原序列分为为若干块,然后对每一块进行块内排序,每次 查询操作就是二分区间第k小元素设为x,jud...

creatorx的博客 3万+

通过一个具体的例子,讲解 SAP Cloud Platform Integration(CPI) 的使用方法

最近笔者由于项目需要,又得学习一个新工具:SAP Cloud Platform Integration,简称 CPI,以前又叫做HCI - HANA Cloud Platform Integration Service.笔者想通过本文,把使用这个工具的第一手体会,分享给曾经用过SAP CRM中间件,但尚未有机会接触到CPI的朋友们。之所以本文标题里把SAP CRM中间件和SAP CPI关联在一起,是因为二者同广义上说,扮演的都是系统集成里中间件的角色。SAP ERP和CRM通过qRFC进行业务数据同步,而中

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2275

主席树+可修改主席树

普通主席树 普通主席树比较简单 就是很多个权值线段树 每一次加进去log个节点(每层一个),剩下的节点用原来的线段树中的节点直接连到新节点上就好了 线段树 插入节点 主席树 主席树拆开之后 POJ2104 主席树模板题 代码: 1 #include<algorithm> 2 #include<cstdio&gt...

aozhuan8489的博客 258

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

主席树

主席树 主席树本体:一棵线段树 需要注意的是,主席树节点编号方式和普通线段树不同:主席树按照DFS顺序编号。 节点信息:有左右儿子节点的编号,还有该节点代表的离散化区间中出现的数的个数。 静态主席树的基本思想是把原来的n棵线段树合并成一棵,因为每次新加进来一个数,总是只修改一条链上的值,没有必要新建一棵线段树。我们只需要在原来的节点后面增加lognlognlogn个节点就能保留新增的信息,原来的节...

qq_36284852的博客 507

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

关于主席树

什么是主席树? 主席树又叫做可持久化线段树,其实后者才是它的大名只是大家都图方便就叫前者了。 可持久化线段树,一听名字就知道它的两个终点:可持久化,线段树。 都要学主席树了,线段树是什么总归都知道的吧,那什么是可持久化呢? 可持久化理解起来其实也很简单,说白了就是可以查询历史节点就可以叫可持久化了,所以可持久化线段树的意思就是可以查询线段树的历史节点就是可持久化了。 如何实现可持久化? 我们这边先给出一棵线段树吧。 画的不好,大家理解一下就行了 假设说我现在想要单点修改最左边的叶子节点 在这里插入图片描述

two_big_monkey的博客 2141

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

主席树介绍

函数式(现在又称主席式。。。)数据结构从来都没写过,感觉这个东西可以挖掘出不少东西出来,于是开一组专题。 先根据 Seter 留下的文本做一些记录。。 主席树大概是一种离线结构,我以前反正没看到过这东西,所以就自己给他起名字了!如果谁知道这东西的真名,请告诉我! 现在我们知道,主席树的全名应该是 函数式版本的线段树。加上附带的一堆 technology。。 。。

MetalSeed 4万+

主席树总结

主席树总结 主席树一个可持久化数据结构。 什么叫可持久化数据结构???普通数据结构维护的是更新之后的状态,这个状态会覆盖之前的状态,使得之前的状态丢失,但可持久化数据结构并不是这样,通过建立多个不同版本的线段树,使得历史版本的线段树仍然可以查询到,更新并不会影响历史版本的状态,这种就叫可持久化线段树。 主席树其实可以维护的是历史版本的区间信息。 区间第K大 区间中小于某个值的个...

qq_40921866的博客 160
上一篇: 我的线段树
下一篇: 【BZOJ】1019: [SHOI2008]汉诺塔
PragIncor
博客等级 码龄9年 1粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值