萌新刚学可持久化,求助
查看原帖
萌新刚学可持久化,求助
149175
千灯楼主2021/12/11 19:38
#include<bits/stdc++.h>
using namespace std;

#define F(a,b,c) for(int a=b;a<=c;++a) 

int R(){int x=0,f=1;char c=getchar();for(;c<'0'||c>'9';c=getchar()) if(c=='-') f=-1;
	  for(;c>='0'&&c<='9';c=getchar()) x=(x<<3)+(x<<1)+(c^48);return x*f;}
		   
const int N = 2e5+10;
const int L = 20;
struct TREE{int ch[2],num;}t[N*L];		   
int n,m,trcnt,T[N],X[N],a[N];
int Mdfy(int pr,int a,int b,int S){int x;t[x=++trcnt].num=t[pr].num+1;
	if(a^b){int mid=a+b>>1,d=0;	
		t[x].ch[d=(S>mid)]=Mdfy(t[pr].ch[d],d?mid+1:a,d?b:mid,S); 
		t[x].ch[d^1]=t[pr].ch[d^1];
	}return x;
}
int Qry(int l,int r,int k){int a=1,b=n;
	while(a^b){
		int ls=t[t[r].ch[0]].num-t[t[l].ch[0]].num,d=0,mid=a+b>>1;
		l=t[l].ch[d=(ls<k)],r=t[r].ch[d],k-=d*ls;
		a=d?mid+1:a,b=d?b:mid;
	}return a;
}

signed main(){n=R(),m=R();
	F(i,1,n) X[i]=a[i]=R();
	sort(X+1,X+n+1);n=unique(X+1,X+n+1)-X-1;
	F(i,1,n) T[i]=Mdfy(T[i-1],1,n,lower_bound(X+1,X+n+1,a[i])-X);
	F(i,1,m){int l=R(),r=R(),k=R();
		printf("%d\n",X[Qry(T[l-1],T[r],k)]);
	}
	return 0;
}

本地能过,洛谷IDE,测评不能

2021/12/11 19:38
加载中...