洛谷 p3834 主席树
2024-09-06 16:35:53
题目链接:https://www.luogu.org/problem/P3834
主席树求静态区间第k小
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define maxn 200005
#define ll long long
int T[maxn*],L[maxn*],R[maxn*],sum[maxn*],tot;
ll a[maxn],b[maxn];
inline int update(int pre,int l,int r,int x)
{
int rt=++tot;
L[rt]=L[pre];
R[rt]=R[pre];
sum[rt]=sum[pre]+;
if(l<r)
{
int mid=l+r>>;
if(x<=mid)L[rt]=update(L[pre],l,mid,x);
else R[rt]=update(R[pre],mid+,r,x);
}
return rt;
}
inline int query(int u,int v,int l,int r,int k)
{
if(l>=r)return l;
int x=sum[L[v]]-sum[L[u]],mid=l+r>>;
if(x>=k)return query(L[u],L[v],l,mid,k);
else return query(R[u],R[v],mid+,r,k-x);
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%lld",&a[i]);
b[i]=a[i];
}
sort(b+,b++n);
int len=unique(b+,b++n)-b-;
tot=;
for(int i=;i<=n;i++)
{
int pos=lower_bound(b+,b++len,a[i])-b;
T[i]=update(T[i-],,len,pos);
}
int l,r,k;
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&l,&r,&k);
printf("%lld\n",b[query(T[l-],T[r],,len,k)]);
}
return ;
}
最新文章
- 记:MySQL 5.7.3.0 安装 全程截图
- 如何把Qlik Sense嵌入到Web应用中
- 如何在插件中添加Actor类
- django views中提示cannot convert dictionary update sequence element #0 to a sequence错误
- Excel应该这么玩——0、初衷:用IT方法玩Excel
- google全球地址大全
- 89. Gray Code
- 执行*.sh脚本时提示Permission denied
- paip.提升用户体验---c++ qt 取消gcc编译的警告信息.txt
- httpclient源码分析之MainClientExec
- stringMVC_09文件批量上传
- 嵌入式的SQL程序设计
- bzoj4331: JSOI2012 越狱老虎桥
- 微信小程序列表加载更多
- 使用 ExceptionDispatchInfo 捕捉并重新抛出异常
- 2.Hadoop集群搭建之Hadoop(包含HDFS和Yarn)安装
- [Leetcode Week16]Insertion Sort List
- OPENGL_变换与坐标系
- javaEE(5)_Cookie和Session
- JS防止全局变量污染解决方案