D. Vitya and Strange Lesson(01-Trie)

Posted Harris-H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了D. Vitya and Strange Lesson(01-Trie)相关的知识,希望对你有一定的参考价值。

D. Vitya and Strange Lesson(01-Trie)

全局异或、然后全局 m e x mex mex,可以用 01 − T r i e 01-Trie 01Trie

具体就是先把数组 a a a插入到 01 − T r i e 01-Trie 01Trie中,每次尽可能往异或为 0 0 0的方向走。

维护一个 s i z e size size​,当 s i z e = 2 i size=2^i size=2i,就只能往另一个方向走了。

注意维护 s i z e size size之前需要去重,因为 m e x mex mex是不含重复的。

// Problem: D. Vitya and Strange Lesson
// Contest: Codeforces - Codeforces Round #430 (Div. 2)
// URL: https://codeforces.ml/contest/842/problem/D
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// Date: 2021-08-13 09:49:43
// --------by Herio--------

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull; 
const int N=3e5+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a,b) memset(a,b,sizeof a)
#define PII pair<int,int>
#define fi first
#define se second
#define pb emplace_back
#define SZ(a) (int)a.size()
#define ios ios::sync_with_stdio(false),cin.tie(0) 
void Print(int *a,int n){
	for(int i=1;i<n;i++)
		printf("%d ",a[i]);
	printf("%d\\n",a[n]); 
}
#define il inline
const int li=20;
struct Trie{
	int son[N*li][2],sz[N*li],cnt;
	il void ins(int x){
		int p=0;
		for(int i=li;~i;i--){
			int &s=son[p][x>>i&1];
			if(!s) s=++cnt;
			p=s;
			sz[p]++;
		}
	}
	il int que(int x){
		int p=0,ans=0;
		for(int i=li;~i;i--){
			int s=x>>i&1;
			if(sz[son[p][s]]==1<<i) ans^=1<<i,p=son[p][!s];
			else p=son[p][s];
		}
		return ans;
	}
}T;
int a[N];
int main(){
	int n,m;scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	sort(a+1,a+n+1);n=unique(a+1,a+n+1)-a-1;
	for(int i=1;i<=n;i++) T.ins(a[i]);
	int c=0;
	while(m--){
		int x;scanf("%d",&x);c^=x;
		printf("%d\\n",T.que(c));
	}
	return 0;
}

以上是关于D. Vitya and Strange Lesson(01-Trie)的主要内容,如果未能解决你的问题,请参考以下文章

cf842d Vitya and Strange Lesson

Codeforce842D Vitya and Strange Lesson

CodeForeces 842d Vitya and Strange Lesson ——(带lazy标记的01字典树)

Codeforces Gym 101138 D. Strange Queries

It's strange. I felt less lonely when I didnt know you.

Codeforces 718 AEfim and Strange Grade