此题 我对着第一篇题解写,结果死活过不了样例,怎么回事!!??求求了!!
代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 1e7+5;
struct node
{
int ls;
int rs;
int sum;
}t[N];
int a[N];
int b[N];
int cnt;
int rt[N];
int jianshu(int l,int r)
{
int o = ++cnt;
if(l == r)
{
return o;
}
int mid = l+r>>1;
t[o].ls = jianshu(l,mid);
t[o].rs = jianshu(mid+1,r);
return o;
}
int add(int rt,int l,int r,int x)
{
int o = ++cnt;
t[o] = t[rt];
t[o].sum++;
if(l == r)
{
return o;
}
int mid = (l+r)>>1;
if(x<=mid)
{
t[o].ls = add(t[rt].ls,l,mid,x);
}
else
{
t[o].rs = add(t[rt].rs,mid+1,r,x);
}
return o;
}
int ask(int o,int rt,int l,int r,int k)
{
if(l == r)
{
return l;
}
int mid = l+r>>1,x = t[t[o].ls].sum-t[t[rt].ls].sum;
if(x>=k)
{
return ask(t[o].ls,t[rt].rs,l,mid,k);
}
else
{
return ask(t[o].rs,t[rt].rs,mid+1,r,k-x);
}
}
int main()
{
int n,_;
scanf("%d %d",&n,&_);
for(int i = 1;i<=n;i++)
{
scanf("%d",&a[i]);
b[i] = a[i];
}
sort(b+1,b+n+1);
int m = unique(b+1,b+n+1)-b-1;
rt[0] = jianshu(1,m);
for(int i = 1;i<=n;i++)
{
int s = lower_bound(b+1,b+m+1,a[i])-b;
rt[i] = add(rt[i-1],1,m,s);
}
while(_--)
{
int l,r,k;
scanf("%d %d %d",&l,&r,&k);
int t = ask(rt[r],rt[l-1],1,m,k);
printf("%d\n",b[t]);
}
return 0;
}