社区讨论
样例不过求调
P3834【模板】可持久化线段树 2参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lo2b71sr
- 此快照首次捕获于
- 2023/10/23 10:59 2 年前
- 此快照最后确认于
- 2023/11/03 11:09 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
#define mid (l+r>>1)
const int N=2e5+10;
struct node{int l,r,v;};
int n,m,q,cnt,a[N],b[N],rt[N];
node tr[N<<5];
inline int build(int pre,int l,int r,int x) {
int p=++cnt;
tr[p]={tr[pre].l,tr[pre].r,tr[pre].v+1};
if(l<r) {
if(x<=mid) tr[p].l=build(tr[pre].l,l,mid,x);
else tr[p].r=build(tr[pre].r,mid+1,r,x);
}
return p;
}
inline int query(int L,int R,int l,int r,int k) {
if(l==r) return l;
int x=tr[tr[L].l].v-tr[tr[R].l].v;
if(x>=k) return query(tr[L].l,tr[R].l,l,mid,k);
else return query(tr[L].r,tr[R].r,mid+1,r,k-x);
}
signed main() {
ios::sync_with_stdio(NULL);
cin>>n>>q,m=n;
for(int i=1;i<=n;++i) cin>>a[i],b[i]=a[i];
sort(b+1,b+1+m),m=unique(b+1,b+1+m)-b-1;
for(int i=1;i<=n;++i) {
int x=lower_bound(b+1,b+1+m,a[i])-b;
rt[i]=build(rt[i-1],1,m,x);
}
while(m--) {
int l,r,k;
cin>>l>>r>>k;
cout<<b[query(rt[l-1],rt[r],1,m,k)]<<endl;
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...