可持久化 01 trie

ChElsYqwq發表於2024-03-21

根可持久化線段樹差不多,這裡貼個板子 >w<

void insert(int &p,int q,int x,int i,int id) {
	p=++tot, val[p]=id;
	if(i==-1) return;
	tr[p][0]=tr[q][0], tr[p][1]=tr[q][1];
	int d=x>>i&1;
	insert(tr[p][d],tr[q][d],x,i-1,id);
}
int ask(int x,int p,int l) {
	int res=0;
	dn(i,30,0) {
		int d=(x>>i&1)^1;
		if(tr[p][d]&&val[tr[p][d]]>=l) res|=(1<<i), p=tr[p][d];
		else p=tr[p][d^1];
	}
	return res;
}

相關文章