萌新求助普及题P1138
  • 板块灌水区
  • 楼主Brainless_zxc
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/5/5 10:06
  • 上次更新2024/5/5 11:36:33
查看原帖
萌新求助普及题P1138
661274
Brainless_zxc楼主2024/5/5 10:06

rt,权值线段树板子题求助qwq

#include<bits/stdc++.h>
#define int long long
using namespace std;
long long n;
long long tree[400005],mark[400005];
long long a[100005],b[100005],cnt,k;
inline void change(int p){
	tree[p]=tree[p*2]+tree[p*2+1];
}
inline void build_tree(int l,int r,int p){
	if(l==r){
		tree[p]=b[l];
		return;
	}
	int mid=(l+r)>>1;
	build_tree(l,mid,p*2);
	build_tree(mid+1,r,p*2+1);
	change(p);
}
inline long long query(int kth,int l,int r,int p){
	if(l==r){
		return l;
	}
	int mid=(l+r)>>1;
	if(tree[p*2]>=k){
		query(k,l,mid,p*2);
	}
	else{
		query(k,mid+1,r,p*2+1);
	}
}
long long maxx=0;
signed main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		if(!b[a[i]]){
			b[a[i]]=1;
			cnt++;
		}
		maxx=max(maxx,a[i]);
	}
	if(k<=0||k>cnt){
		cout<<"NO RESULT"<<endl;
		return 0;
	}
	build_tree(1,maxx,1);
	cout<<query(k,1,maxx,1)<<endl;
}
2024/5/5 10:06
加载中...