QWQ萌新刚学主席树,第4点WA,求助
查看原帖
QWQ萌新刚学主席树,第4点WA,求助
455139
qwcdim楼主2021/12/4 10:58
#include<iostream>
#include<cstdio>
#include<stdio.h>
using namespace std;
const int N=1e6+10;
int n,tot=1,m,a[N],root[N];
struct node{
	int lson,rson,sum;
}t[N*70];
inline int read(){
	char ch;
	ch=getchar();
	while(ch<'0'||ch>'9') ch=getchar();
	int f=0;
	while(ch>='0'&&ch<='9'){
		f=(f<<3)+(f<<1)+ch-48;
		ch=getchar();
	}
	return f;
}
inline void update(int &o,int p,int l,int r,int x){
	t[o=++tot]=t[p];
	if(l==r){
		t[o].sum++;
		return;
	}
	int mid=(l+r)>>1;
	if(x<=mid) update(t[o].lson,t[p].lson,l,mid,x);
	else update(t[o].rson,t[p].rson,mid+1,r,x);
	t[o].sum=t[t[o].lson].sum+t[t[o].rson].sum;
}
inline int query(int p,int o,int l,int r,int k){
	if(l==r)return l;
	int mid=l+r>>1;
	int sum=t[t[o].lson].sum-t[t[p].lson].sum;
	if(k<=sum)return query(t[p].lson,t[o].lson,l,mid,k);
	else return query(t[p].rson,t[o].rson,mid+1,r,k-sum);
}
int main(){
	freopen("text.txt","w",stdout);
	n=read(),m=read();
	for(int i=1;i<=n;i++){
		a[i]=read();
		root[i]=root[i-1];
		update(root[i],root[i-1],1,N,a[i]);
	}
	for(int i=1,l,r,k;i<=m;i++){
		l=read(),r=read(),k=read();
		printf("%d\n",query(root[l-1],root[r],1,N,k));
	}
	return 0;
}
2021/12/4 10:58
加载中...