权值线段树求助
查看原帖
权值线段树求助
1262406
yhy2024楼主2024/8/7 07:28

刚学,把这题当板子做

#include<bits/stdc++.h>
#define N 100005
using namespace std;
int tr[N*4],a,m,n,k1;
void pushup(int k){
	tr[k]=tr[k<<1]+tr[k<<1|1];
}
void insert(int k,int l,int r,int num){
	if(l==r){
		tr[k]++;
		return;
	}
	int mid=(l+r)>>1;
	if(num<=mid) insert(k<<1,l,mid,num);
	else insert(k<<1|1,mid+1,r,num);
	pushup(k);
}
int query(int k,int l,int r,int x){
	if(l==r){
		return l;
	}
	int mid=(l+r)>>1;
	if(x<mid) return query(k<<1,l,mid,k);
	else return query(k<<1|1,mid+1,r,x-mid+1);
}
int main(){
	cin>>n>>k1;
	for(int i=1;i<=n;i++){
		cin>>a;
		insert(1,1,n,a);
	}
	cout<<query(1,1,n,k1);
	return 0;
} 
2024/8/7 07:28
加载中...