首页 > 其他分享 >静态区间第k小

静态区间第k小

时间:2023-06-22 15:12:57浏览次数:27  
标签:return lc 静态 sum int maxn rc 区间

可持久化线段树

 

 #include <cstdio>
 #include <algorithm>
 using namespace std ;
 const int maxn=200010;
 int a[maxn],b[maxn],blen,n,CNT;
 int sum[maxn<<5],lc[maxn<<5],rc[maxn<<5],rt[maxn<<5];
 
  int update(int k,int l,int r,int x){
 	int t=++CNT,md=(l+r)>>1;
 	lc[t]=lc[k],rc[t]=rc[k],sum[t]=sum[k]+1;
 	
 	if(l==r) return t;
 	if(x<=md) lc[t]=update(lc[t],l,md,x); 
	 else rc[t]=update(rc[t],md+1,r,x);
	 return t;
 }
 
 int query(int l,int r,int x,int y,int kth){
 	int md=(l+r)>>1,t=sum[lc[y]]-sum[lc[x]];
 	if(l==r) return l;
 	if(kth<=t) return query(l,md,lc[x],lc[y],kth);
 	else return query(md+1,r,rc[x],rc[y],kth-t);
 } 
 
 int main(){
 	int p,i,x,y,k,m;
 	scanf("%d%d",&n,&m);
 	for(i=1;i<=n;i++) scanf("%d",a+i),b[i]=a[i];
 	
 	sort(b+1,b+n+1);
 	blen=unique(b+1,b+n+1)-b-1;
 	
 	for(i=1;i<=n;i++){
 		p=lower_bound(b+1,b+blen+1,a[i])-b;
 		
 		rt[i]=update(rt[i-1],1,blen,p);
	 }
	while(m--){
		scanf("%d%d%d",&x,&y,&k);
	printf("%d\n",b[query(1,blen,rt[x-1],rt[y],k)]);
	}
 }
 

 

标签:return,lc,静态,sum,int,maxn,rc,区间
From: https://www.cnblogs.com/towboa/p/17497762.html

相关文章

  • Android-Kotlin-区间与FOR&LIST&MAP简单使用
    区间与for:packagecn.kotlin.kotlin_base04/***区间与for*/funmain(args:Array<String>){/***Kotlin中提供了区间,例如:存入1到100,在Java中可能要写多行代码,而在Kotlin中很简单,代码如下*1..100*/varnumbers=1..100/***......
  • SRv6 静态配置
         ......
  • Mockito 静态类中的void方法
    moke例子(我直接用伪代码)publicclassDictUtils{ publicstaticvoidremoveDictCache(Stringkey){ //执行得方法业务 }}你的业务代码中引用这个类的方法publicvoiddeleteDictTypeByIds(Long[]dictIds){ DictUtils.removeDictCache(Stingkey); //业务代码......
  • 回文质数(快速求出一个区间内的所有回文数)
    题目链接:回文质数code:#include<bits/stdc++.h>usingnamespacestd;vector<int>constructPalindromes(intstart,intend){vector<int>palindromes;if(start<=1){palindromes.push_back(1);start=2;}intstartLen=......
  • 区间选点问题
    题目描述数轴上有\(n\)开区间\((a_i,b_i)\),请选择尽量多的区间,使其两两不相交。(开区间意味着,左右两个端点是不包含的)输入格式第一行\(n(n\le1000000)\),之后\(n\)行,每行两个数分别为\(ai,bi\),输出格式最少需要的点的个数样例样例输入13132435样例输出11数据范......
  • 选择不相交区间
    题目描述数轴上有\(n\)开区间\((a_i,b_i)\),请选择尽量多的区间,使其两两不相交。(开区间意味着,左右两个端点是不包含的)输入格式第一行\(n\)之后\(n\)行,每行两个数分别为\(a_i,b_i\)输出格式最多能选择的区间个数样例样例输入13132435样例输出12数据范围对于\(2......
  • vue3+vite 动态引用静态资源,动态引入assets文件夹图片的几种方式
    可以参考这个回答,亲测有用 https://blog.csdn.net/weixin_43743175/article/details/125892613 ......
  • 树状数组详解!(C++_单点/区间查询_单点/区间修改)
    先把这张著名的树状数组结构图摆在最前面,接下来我们就以这张图讲起!       首先图中的A数组就是所谓的原数组,也就是普通的数组形态,C则是我们今天要说的树状数组(可以看出一个树的形状,但其实和树没多大关系)从图中可以明显看到以下几个式子:有点像前缀和不是?但这样还看不出什......
  • CCF_201612-4 压缩编码(C++_区间DP)
    问题描述       给定一段文字,已知单词a1,a2,…,an出现的频率分别t1,t2,…,tn。可以用01串给这些单词编码,即将每个单词与一个01串对应,使得任何一个单词的编码(对应的01串)不是另一个单词编码的前缀,这种编码称为前缀码。使用前缀码编码一段文字是指将这段文字中的每......
  • hugo 建立静态网站
    hugo简介https://gohugo.io什么是hogo?Hugo是Go编写的静态网站生成器,速度快,易用,可配置。Hugo有一个内容和模板目录,把他们渲染到完全的HTML网站。Hugo依赖于Markdown文件,元数据字体。用户可以从任意的目录中运行Hugo,支持共享主机和其他系统。Hugo只需要几分之一秒......