首页 > 其他分享 >CF19D(树套树)

CF19D(树套树)

时间:2024-04-01 18:46:37浏览次数:27  
标签:log CF19D get int mid 树套

一道非常有意思的树套树。

一眼一个空间\(n\log n\)时间\(n \log^{2} n\)的树套树,发现过不了。考虑优化。我们发现在中间线段树的地方可以不用平衡树存下来,只记最大值即可。然后我们对于每个横坐标开一颗fhq,然后分出\(\log n\)段区间,这些区间的最大值大于给定点的纵坐标。然后用二分找到最左的点,然后在这里找到最下的点即可。

void get(int l,int r,int k,int p){
	if(l==r){
		cout<<a[l]<<" "<<getnxt(l,k)<<"\n";
		flag=1;
		return;
	}
	int mid=(l+r)>>1;
	if(d[p<<1]>k) get(l,mid,k,p<<1);
	else if(d[p<<1|1]>k) get(mid+1,r,k,p<<1|1);
}
void getsum(int l,int r,int p,int s,int t,int k){
	if(flag==1) return;
	if(l>=s&&r<=t){
		//cout<<l<<"-"<<r<<"\n";
		if(d[p]>k) get(l,r,k,p);
		return;
	}
	int mid=(l+r)>>1;
	if(s<=mid) getsum(l,mid,p<<1,s,t,k);
	if(t>mid) getsum(mid+1,r,p<<1|1,s,t,k);
}

标签:log,CF19D,get,int,mid,树套
From: https://www.cnblogs.com/wuhupai/p/18109144

相关文章

  • 树套树从入门到去世
    如何实现数据结构的嵌套?首先我们知道,单个数据结构是对一些存有某些信息的节点进行操作,从而达到目的。然后我们将这些节点换成另一种数据结构,更改的时候对某些数据结构进行修改,就可以实现嵌套。二维树状数组其实是最好写的一种树套树。单点修改,区间查询就像上文说的一样,我们......
  • 树套树
    树套树树状数组,(动态开点线段树),平衡树二逼平衡树您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:查询\(k\)在区间内的排名查询区间内排名为\(k\)的值修改某一位值上的数值查询在区间内的前驱(前驱定义为小于,且最大的数)查询\(......
  • 树套树板子,但是带修莫队+值域分块
    \(\text{Link-LuoguBlog}\)原题传送门没啥重要的事情,就是终于过了这题非常开心,发现自己是莫队的时间戳部分写错了调了114514年我也只能说是十分趣味。以及今天深刻地认识到了带修莫队应该len=pow(n,0.66);。就是裸的带修莫队+值域分块,就不说了,直接放代码了昂。如果有人......
  • 树套树
    伪树套树CF19DPoints我们只关心最值而不是所有点的信息,所以不需要真的矩形查询对\(x\)建权值线段树,维护纵坐标最大值就能线段树二分求出询问矩形中最小的横坐标,再在这个横坐标上找最小纵坐标即可,可以在叶子上用set维护\(y\)实现。时间复杂度\(O(n\logn)\)......
  • 【树套树,LCT,出栈序】P4027 [NOI2007] 货币兑换
    其实是我Li-Chao-Tree哒!!考虑转移\(f_x=\minf_{anc}+(d_{x}-d_{anc})p_x+q_x\)其中\(anc\)为\(x\)的祖先,然后满足\(d_{anc}\geqd_{x}-li_{x})\)。考虑如果用权值线段树+带撤销的李超树可以维护\(li_{x}\)可以维护\(li_{x}<0\)的情况。但是这个题......
  • 【学习笔记】树套树
    所谓树套树,其本质是通过用树维护一组树的根,从而维护强悍的数据1线段树套平衡树线段树套#include<bits/stdc++.h>usingnamespacestd;#defineMAXN50005intseg[MAXN<<2];intamin=1000000,amax=0;structNode{ intval,rnd,siz; intch[2]; }t[MAXN*80];intt......
  • 【个人模板封装】树套树、高维数据结构
    前言这是我个人使用的一些模板封装,限于个人能力,可能存在诸多不足与漏洞,在未加测试直接使用前请务必小心谨慎。更新可能会滞后于我本地的文档,如有疑问或者催更之类的可以在评论区留言。全文模板测试均基于以下版本信息,请留意版本兼容问题。Windows,64bitG++(ISOC++20)stack......
  • CF19D. Points
    感觉不难啊,为什么是*2800捏。先离散化。对每个横坐标开一个set存点,插入删除就能做了。查询的时候线段树二分就行了。更具体地,我们维护区间内纵坐标的最大值,在二分的时候能左就左,不能左就右。注意这里的右上角是严格大于。点击查看代码#include<bits/stdc++.h>#definei......
  • 树套树——维护区间内权值信息的“重武器”
    Introduction树套树,顾名思义,就是将各类“树”据结构的节点换成“树”,以此解决一些问题。一般情况下,两层树分别维护区间信息和区间内权值的信息。而因为树套树极劣的空间复杂度和巨大的常数,经常需要使用动态开点和垃圾回收的方法降低空间复杂度,以及一定的卡常技巧(将较为短小......
  • [浅谈] 二维数据结构——树套树
    \(\color{purple}\text{Ⅰ.二维树状数组}\)\(\color{orange}\text{例一:P3372【模板】线段树1}\)$\color{green}\text{2023.1.1014:32}$回忆一下树状数组的区间修改......