WA on #3~#5 求条
查看原帖
WA on #3~#5 求条
933973
CuteForces楼主2025/7/28 09:57

RT,以下代码在 https://www.acwing.com/activity/content/code/content/9637930/ 是能过的,但在 Luogu 没过

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2000010;
struct node{int l,r,s;}t[N];
int n,m,tot,root[N],a[N],b[N];
int get(int x){return lower_bound(b+1,b+n+1,x)-b;}
int build(int l,int r){
    int p=++tot;
    if(l==r) return p;
    int mid=(l+r)/2;
    t[p]={build(l,mid),build(mid+1,r),0};
    return p;
}
int insert(int now,int l,int r,int x){
    int p=++tot;
    t[p]=t[now];
    if(l==r){
        t[p].s++;
        return p;
    }
    int mid=(l+r)/2;
    if(x<=mid) t[p].l=insert(t[now].l,l,mid,x);
    else t[p].r=insert(t[now].r,mid+1,r,x);
    t[p].s=t[t[p].l].s+t[t[p].r].s;
    return p;
}
int ask(int p,int q,int l,int r,int k){
    if(l==r) return l;
    int mid=(l+r)/2,x=t[t[p].l].s-t[t[q].l].s;
    if(k<=x) return ask(t[p].l,t[q].l,l,mid,k);
    else return ask(t[p].r,t[q].r,mid+1,r,k-x);
}
signed main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        b[i]=a[i];
    }
    sort(b+1,b+n+1);
    int t=unique(b+1,b+n+1)-b-1;
    root[0]=build(1,t);
    for(int i=1;i<=n;i++) root[i]=insert(root[i-1],1,t,get(a[i]));
    for(int i=1;i<=m;i++){
        int l,r,k;
        cin>>l>>r>>k;
        cout<<b[ask(root[r],root[l-1],1,t,k)]<<endl;
    }
    return 0;
}
2025/7/28 09:57
加载中...