1 条题解

  • 0
    @ 2025-12-30 18:30:15
    #include<bits/stdc++.h>
    using namespace std;
    const int N=2e5+10;
    #define lc(p) tr[p].ls
    #define rc(p) tr[p].rs
    #define mid ((l+r)>>1)
    struct node{int ls,rs,siz;}tr[N*40];int rt[N],trlen,a[N];
    void change(int &u,int v,int l,int r,int x)
    {
    	u=++trlen;tr[u]=tr[v];tr[u].siz++;
    	if(l==r)return;
    	if(x<=mid)change(lc(u),lc(v),l,mid,x);
    	else change(rc(u),rc(v),mid+1,r,x);
    }
    int query(int u,int v,int l,int r,int x)
    {
    	if(u==v)return 0;
    	if(l==r)return l;
    	int siz=tr[lc(u)].siz-tr[lc(v)].siz;
    	if(x<=siz)return query(lc(u),lc(v),l,mid,x);
    	else return query(rc(u),rc(v),mid+1,r,x-siz);
    }
    int main()
    {
    	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    	int n,m;cin>>n>>m;
    	for(int i=1;i<=n;i++)cin>>a[i];
    	for(int i=1;i<=n;i++)change(rt[i],rt[i-1],0,1e9,a[i]);
    	for(int i=1;i<=m;i++)
    	{
    		int l,r,k;cin>>l>>r>>k;l++,k++;
    		cout<<query(rt[r],rt[l-1],0,1e9,k)<<'\n';
    	}
    	return 0;
    }
    • 1

    信息

    ID
    8134
    时间
    500ms
    内存
    1024MiB
    难度
    6
    标签
    递交数
    24
    已通过
    11
    上传者