求助,主席树样例未过
查看原帖
求助,主席树样例未过
511907
一只大龙猫楼主2021/12/4 11:46

RT,发现好像查询为1 1 1时才能输出正确答案,其他的都会输出INF

#include<iostream>
using namespace std;
struct node{
	int ls,rs,sum;
}tree[3500000];
int tot=1,n,m,root[1000001];
const int INF=1e9;
void update(int &o,int p,int l,int r,int x){
	tree[o=++tot]=tree[p];
	tree[o].sum++;
	if(l==r){
		return;
	}
	int mid=(l+r)>>1;
	if(x<=mid)update(tree[o].ls,tree[p].rs,l,mid,x);
	else update(tree[o].rs,tree[p].rs,mid+1,r,x);
	return;
}
int query(int p,int o,int l,int r,int k){
	if(l==r)return l;
	int mid=(l+r)>>1;
	int sum=tree[tree[o].ls].sum-tree[tree[p].ls].sum;
	if(k<=sum)return query(tree[p].ls,tree[o].ls,l,mid,k);
	else return query(tree[p].rs,tree[o].rs,mid+1,r,k-sum);
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		int x;
		cin>>x;
		update(root[i],root[i-1],-INF,INF,x);
	}
	for(int i=1;i<=m;i++){
		int l,r,k;
		cin>>l>>r>>k;
		cout<<query(root[l-1],root[r],-INF,INF,k)<<endl;
	}
	return 0;
}
2021/12/4 11:46
加载中...