此代码莫名其妙的有6个点输入数据不足(第二行没读满 n 个数),哪位佬能解释一下
#include<bits/stdc++.h>
using namespace std;
int x[200005];
int z[200005],z2[200005];
int root[200005];
pair<int,int>x2[200005];
int cnt=0,top=0;
struct edge{
int l,r,val;
}y[4000005];
bool check=0;
void up(int &now,int had,int l,int r,int p){
if(!now)now=++top;
if(l==r&&l==p){
y[now].val=y[had].val+1;
return;
}
int mid=(l+r)/2;
if(p<=mid){
y[now].r=y[had].r;
up(y[now].l,y[had].l,l,mid,p);
}
else{
y[now].l=y[had].l;
up(y[now].r,y[had].r,mid+1,r,p);
}
y[now].val=y[had].val+1;
return;
}
int down(int a,int b,int l,int r,int k){
if(l==r)return l;
int mid=(l+r)/2;
if(k<=y[y[a].l].val-y[y[b].l].val)return down(y[a].l,y[b].l,l,mid,k);
else return down(y[a].r,y[b].r,mid+1,r,k-(y[y[a].l].val-y[y[b].l].val));
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&x[i]);
x2[i].first=x[i];
x2[i].second=i;
}
sort(x2+1,x2+n+1);
for(int i=1;i<=n;i++){
if(x2[i].first!=x2[i-1].first)z2[++cnt]=x2[i].first;
z[x2[i].second]=cnt;
}
for(int i=1;i<=n;i++)up(root[i],root[i-1],1,cnt,z[i]);
while(m--){
int l,r,k;
scanf("%d%d%d",&l,&r,&k);
printf("%d\n",z2[down(root[r],root[l-1],1,cnt,k)]);
}
return 0;
}