首页 > 其他分享 >可持久化线段树

可持久化线段树

时间:2023-05-22 18:55:45浏览次数:23  
标签:cnt 持久 int 线段 tr mid cin void

区间第K大板子(动态开点)

int n, m;
int root[N], idx;
struct node{
	int l, r;
	int cnt;
}tr[N * 40];

void pushup(int u){
	tr[u].cnt = tr[tr[u].l].cnt + tr[tr[u].r].cnt;
}
void insert(int p, int &q, int l, int r, int x){
	q = ++idx, tr[q] = tr[p];
	if(l == r) tr[q].cnt++;
	else{
		int mid = l + r >> 1;
		if(x <= mid) insert(tr[p].l, tr[q].l, l, mid, x);
		else insert(tr[p].r, tr[q].r, mid + 1, r, x);
		pushup(q);
	}
}
int query(int p, int q, int l, int r, int k){
	if(l == r) return l;
	else{
		int mid = l + r >> 1;
		int cnt = tr[tr[q].l].cnt - tr[tr[p].l].cnt;
		if(cnt >= k) return query(tr[p].l, tr[q].l, l, mid, k);
		return query(tr[p].r, tr[q].r, mid + 1, r, k - cnt);
	}
}
void solve(){
	cin >> n >> m;
	_for(i, 1, n){
		int x;
		cin >> x;
		insert(root[i - 1], root[i], 0, INF, x);
	}
	while(m--){
		int l, r, k;
		cin >> l >> r >> k;
		cout << query(root[l - 1], root[r], 0, INF, k) << endl;
	}
}

标签:cnt,持久,int,线段,tr,mid,cin,void
From: https://www.cnblogs.com/DS-Tape/p/17421450.html

相关文章

  • 如何借助Kafka持久化存储K8S事件数据?
    大家应该对KubernetesEvents并不陌生,特别是当你使用kubectldescribe命令或EventAPI资源来了解集群中的故障时。 $kubectlgetevents15mWarningFailedCreate......
  • 空间判断点是否在线段上
    空间判断点是否在线段上的原理以及实现目录1.概述2.详论3.参考1.概述判断点是否在线段上的算法非常简单,有很多种实现方式,总结一下我自己的实现。2.详论个人认为通过向量计算的方式是比较好的,因为可以保证在二维和三维的情况都成立。判断空间中点P是否......
  • 【CSP 202303-4】星际网络Ⅱ 【离散化+线段树】
    题目链接http://118.190.20.162/view.page?gpid=T162题意一个网络地址由\(n\)(\(n\leq512\),且是16的倍数)位二进制位组成(形如xxxx:xxxx:....:xxxx),有若干用户需要申请一些网络地址。有三种操作:申请。给出一个用户编号,和要查询的地址区间[L,R],若全都没有被申请过,或者......
  • 线段树学习笔记
    让我们来一步一步理解! 1.向上更新voidpush_up(intrt){//向上更新sum[rt]=sum[rt<<1]+sum[rt<<1|1];} 2.向下更新voidpush_down(intrt,intm){if(add[rt]){//若有标记,则将标记向下移动一层add[rt<<1]+=add[rt];add[rt......
  • Tensorflow变量管理及模型持久化,实现实现线性回归
    变量管理随着神经网络的结构更加复杂,参数更多时,需要一个更好的方式来传递和管理变量。在TF中提供了通过变量的名字来创建或者获取一个变量的机制,通过这个机制不同函数可以直接通过变量的名字来直接使用变量。这机制主要是通过tf.get_variable和tf.variable_scope实现的。tf.get_......
  • Redis学习手册(持久化)
    一、Redis提供了哪些持久化机制:   1).RDB持久化:   该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。       2).AOF持久化:   该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动......
  • 线段树均摊复杂度
    GSS4-CanyouanswerthesequeriesIV操作\(1\):\(a_i=\sqrt{a_i},i\in[l,r]\)操作\(2\):询问\(\sum_{i=l}^ra_i\)开根号无法使用tag的方式维护,因为开根号后不确定减去多少,无法维护\(\suma_i\)。\(a_i=2^{\loga_i}\),每次开根号后\(\loga_i\)会减半,操作\(\log\l......
  • RocketMQ之消息持久化存储源码分析
    一、原理1.1消息存在哪了?消息持久化的地方其实是磁盘上,在如下目录里的commitlog文件夹里。/root/store/commitlog源码如下://{@linkorg.apache.rocketmq.store.config.MessageStoreConfig}//数据存储根目录privateStringstorePathRootDir=System.getProperty("use......
  • P2495 [SDOI2011] 消耗战 线段树合并做法
    看到题解里面有一个线段树合并做法!感觉很厉害,但是题解和代码都不是很详细所以补充一下不妨假设\(dp_u\)表示\(u\)及其子树内把所有关键点都切断的最小代价,那么不难有\[\begin{equation}dp_u=\begin{cases}+\infty&u是关键点\\\sum_{v\in\operatorname{son}(u)}\m......
  • 线段树维护矩阵
    对于一些只有单点修改且维护的信息具有递推性的题目,由于运算具有结合律,可以将两区间合并写成矩阵乘法的形式,省去一些麻烦的讨论。前置知识:广义矩阵乘法对于一个\(n\timesm\)的矩阵\(A\)和一个\(m\timest\)的矩阵\(B\),定义广义矩阵乘法:\[C_{i,j}=\bigoplus_{k=1}^{m}A_......