主席树板子WA求调
查看原帖
主席树板子WA求调
1062944
Aesyl楼主2023/11/6 19:08

rt,只有#1AC

#include<bits/stdc++.h>
#define int long long
#define N 1000005
#define INF 1e18
namespace IO{
	template<typename T> inline void write(T x){
		if(x<0) putchar('-'),x=-x;
		if(x==0){
			putchar('0'); return ;
		}
		if(x>9) write(x/10);
		putchar(x%10+'0');
		return ;
	}
	template<typename T> inline void read(T &x){
		x=0; int w=1; char ch=getchar();
		while(!isdigit(ch)){
			if(ch=='-') w=-1; ch=getchar();
		}
		while(isdigit(ch))
			x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
		x*=w; return ;
	}
}
using namespace IO;
using namespace std;
struct tree{
	int ls,rs,v,l,r;
}t[N<<4];
int n,m,a[N],b[N],cnt,tot,rt[N];
void build(int &p,int l,int r){
	p=++cnt,t[p].l=l,t[p].r=r;
	if(l==r) return;
	int mid=l+r>>1;
	build(t[p].ls,l,mid);
	build(t[p].rs,mid+1,r);
}
void change(int &p,int q,int x){
	p=++cnt,t[p]=t[q],t[p].v++;
	if(t[p].l==t[p].r) return;
	int mid=t[p].l+t[p].r>>1;
	if(x<=mid) change(t[p].ls,t[q].ls,x);
	else change(t[p].rs,t[q].rs,x);
}
int query(int p,int q,int x){
	if(t[p].l==t[p].r) return a[t[p].l];
	int k=t[t[q].ls].v-t[t[p].ls].v;
	if(k>=x) return query(t[p].ls,t[q].ls,x);
	else return query(t[p].rs,t[q].rs,x-k);
}
signed main(){
	read(n),read(m);
	for(int i=1;i<=n;i++) read(a[i]),b[i]=a[i];
	sort(b+1,b+n+1);
	tot=unique(b+1,b+n+1)-(b+1);
	build(rt[0],1,tot);
	for(int i=1,k;i<=n;i++){
		k=lower_bound(b+1,b+tot+1,a[i])-b;
		change(rt[i],rt[i-1],k);
	}
	int l,r,k;
	while(m--){
		read(l),read(r),read(k);
		write(query(rt[l-1],rt[r],k)),putchar('\n');
	}
	return 0;
}
2023/11/6 19:08
加载中...