제출 #1224743

#제출 시각아이디문제언어결과실행 시간메모리
1224743stdfloatXOR (IZhO12_xor)C++20
0 / 100
1 ms832 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

const int lg = 30;

int id, X;

vector<int> mn;

vector<vector<int>> ch;

void add(int vl, int ind) {
	int cur = 0;
	for (int i = lg - 1; i >= 0; i--) {
		bool bit = vl >> i & 1;
		if (!~ch[cur][bit]) {
			mn[cur] = ind;
			ch[cur][bit] = ++id;
		}
	
		cur = ch[cur][bit];
	}
}

int g(int A, int B) {
	int cur = 0, ans = (int)1e9;
	for (int i = lg - 1; i >= 0; i--) {
		int a = (A >> i) & 1, b = (B >> i) & 1;
		for (int j = 0; j < 2; j++) {
			if (!~ch[cur][j]) continue;

			if ((b ^ j) == a) cur = ch[cur][j];
			else if ((b ^ j) > a) ans = min(ans, mn[ch[cur][j]]);
		}
	}

	return ans;
}

int main() {
	ios::sync_with_stdio(false); cin.tie(nullptr);

	int n;
	cin >> n >> X;

	mn.assign(n * lg, 0);
	ch.assign(n * lg, vector<int>(2, -1));

	add(0, 0);

	int hr = 0, L = 0, K = 0;
	for (int i = 1; i <= n; i++) {
		int x;
		cin >> x;

		hr ^= x;

		int l = g(X, hr);

		if (K < i - l) {
			L = l; K = i - l;
		}

		add(hr, i);
	}

	cout << L + 2 << ' ' << K;
}
#Verdict Execution timeMemoryGrader output
Fetching results...