希望更丰富的展现?使用Markdown
by yyk504 @ 2019-05-11 15:41:30
~~坚信不是我的错~~
```cpp
#include<bits/stdc++.h>
#define N 320000
struct info{int lson,rson,sum;}tree[N*33];
int n,m,a[N],b[N],root[N],x,y,k,cnt,root_now,num;
std::map<int,int> mp;
inline int add(int be_poi,int poi,int val,int xx,int yy)
{
int mid=(xx+yy)>>1,t; tree[t=++num]=tree[be_poi]; tree[t].sum+=val;
if (xx==yy) return num;
if (poi<=mid) tree[t].lson=add(tree[be_poi].lson,poi,val,xx ,mid);
if (poi >mid) tree[t].rson=add(tree[be_poi].rson,poi,val,mid+1,yy );
return t;
}
inline int query(int root_1,int root_2,int xx,int yy,int kth)
{
int mid=(xx+yy)>>1,t;
if (xx==yy) return mid;
if ((t=tree[tree[root_2].lson].sum-tree[tree[root_1].lson].sum)>=kth)
return query(tree[root_1].lson,tree[root_2].lson,xx ,mid,kth );
else return query(tree[root_1].rson,tree[root_2].rson,mid+1,yy ,kth-t);
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++) scanf("%d",&a[i]),b[i]=a[i];
std::sort(b+1,b+1+n);
for (int i=1;i<=n;i++) mp[b[i]]=++cnt; n=cnt; tree[0]=info{0,0,0};
for (int i=1;i<=n;i++) root[i]=add(root_now,mp[a[i]],1,1,n),root_now=root[i];
for (int i=1;i<=m;i++) scanf("%d%d%d",&x,&y,&k),printf("%d\n",b[query(root[x-1],root[y],1,n,k)]);
}
```
by 湛卢 @ 2019-05-11 15:42:40
您是挂了哪几个点?
by KokiNiwa @ 2019-11-07 22:40:31