我宣布这是最美丽的主席树模版,不接受质疑

struct MurasameCute{
	int l,r,ls,rs,sum;
}tr[30000000];
#define l(x) tr[x].l
#define r(x) tr[x].r
#define ls(x) tr[x].ls
#define rs(x) tr[x].rs
#define sm(x) tr[x].sum
#define mid ((l(id)+r(id))>>1)
#define up sm(id)=sm(ls(id))+sm(rs(id))
void crt(int &id,int l,int r,int sum=0){
	id=++cnt;
	l(id)=l,r(id)=r,sm(id)=sum;
}
void copy(int &to,int fr){
	to=++cnt;
	tr[to]=tr[fr];
}
void build(int &id,int l,int r){
	crt(id,l,r,0);
	if(l==r) return;
	build(ls(id),l,mid);
	build(rs(id),mid+1,r);
}
void insert(int id,int x,int y){
	if(l(id)==r(id)){
		sm(id)+=y;
		return;
	}
	if(x<=mid){
		copy(ls(id),ls(id));
		insert(ls(id),x,y);
	}
	else{
		copy(rs(id),rs(id));
		insert(rs(id),x,y);
	}
	up;
}
int kth(int idl,int idr,int k){
	if(l(idl)==r(idl)){
		return l(idl);
	}
	int x=sm(ls(idr))-sm(ls(idl));
	if(x>=k){
		return kth(ls(idl),ls(idr),k);
	}
	else{
		return kth(rs(idl),rs(idr),k-x);
	}
}
posted @ 2025-12-21 17:54  LEWISAK  阅读(2)  评论(0)    收藏  举报