只 AC #11,其余都 WA 求调
查看原帖
只 AC #11,其余都 WA 求调
592238
Elairin176楼主2024/1/29 11:42

CODE:

//完整缺省源请见洛谷云剪贴板 jo5j6ogx
const int N=5e5,M=32;
struct node{
	ll x;
	int p;
	int k;
};
il bool operator<(const node a,const node b){
	ret a.x<b.x;
}
priority_queue<node>q;
int n,k,trie[N*M+10][3],tot=1,cnt[N*M+10];
ll a[N+10],ans;
il void insert(ll x){
	int u=1,c;
	for(ll i=31;i>=0;i--){
		c=(x>>i)&1;
		cnt[u]++;
		if(!trie[u][c]){
			trie[u][c]=++tot;
		}
		u=trie[u][c];
	}
	cnt[u]++;
}
il ll query(ll x,int rk){
	int u=1,c;
	ll ans=0;
	for(ll i=31;i>=0;i--){
		c=(x>>i)&1;
		if(!trie[u][!c]){
			u=trie[u][c];
		}else if(cnt[trie[u][!c]]>=rk){
			u=trie[u][!c];
			ans|=(1ll<<i);
		}else{
			u=trie[u][c];
			rk-=cnt[trie[u][!c]];
		}
	}
	ret ans;
}
int main(void){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	n=read<int>();
	k=read<int>();
	for(int i=1;i<=n;i++){
		a[i]=read<ll>();
		a[i]^=a[i-1];
	}
	for(int i=0;i<=n;i++){
		insert(a[i]);
	}
	for(int i=0;i<=n;i++){
		q.push(node{query(a[i],1),i,1});
	}
	for(int i=1;i<=2*k;i++){
		int p=q.top().p,r=q.top().k;
		ans+=q.top().x;
		q.pop();
		if(r<n){
			q.push(node{query(a[p],r+1),p,r+1});	
		}
	}
	write(ans/2);
	ret 0;
}

一组 hack:
输入:

7 21
5 4 9 9 3 5 10 

输出:
183

2024/1/29 11:42
加载中...