输出似乎全是0
#include<bits/stdc++.h>
using namespace std;
constexpr int N=2e5+1,M=(N+1)*19+1,Mx=1e9;
struct SegmentTreeNode{
int l,r,ls,rs,cnt;
SegmentTreeNode(int l=0,int r=0,int ls=0,int rs=0,int cnt=0):l(l),r(r),ls(ls),rs(rs),cnt(cnt){}
}f[M];
int n,q,tot=0,root[N];
void pushup(int x){
f[x].cnt=f[f[x].ls].cnt+f[f[x].rs].cnt,
f[x].l=f[f[x].ls].l,f[x].r=f[f[x].rs].r;
return;
}
void modify(int l,int r,int val,int&cur,int last){
f[cur=(++tot)]=f[last];
if(l==r){
f[cur].l=l,f[cur].r=r,
f[cur].cnt=f[last].cnt+1;
return;
}
int mid=(l+r)>>1;
if(val<=mid)
modify(l,mid,val,f[cur].ls,f[last].ls);
else
modify(mid+1,r,val,f[cur].rs,f[last].rs);
return pushup(cur);
}
int query(int k,int cur,int last){
if(f[cur].l==f[cur].r)
return f[cur].l;
int cnt=f[f[cur].ls].cnt-f[f[last].ls].cnt;
if(k<=cnt)
return query(k,f[cur].ls,f[last].ls);
else
return query(k-cnt,f[cur].rs,f[last].rs);
}
int main(){
cin>>n>>q;
for(int i=1,k;i<=n;i++){
cin>>k;
modify(1,Mx,k,root[i],root[i-1]);
}
for(int l,r,k;q;--q){
cin>>l>>r>>k;
cout<<query(k,root[r],root[l-1])<<'\n';
}
return 0;
}