163602025-04-28 19:24:35zsomborXorcpp17Hibás válasz 30/100200ms1076 KiB
#include <iostream>
#include <vector>
using namespace std;
using ll = long long;

ll l, r;
vector <ll> ans;

ll xr(vector <ll> v) {
	return ((v[0] ^ v[1]) ^ v[2]);
}

void upd(vector <ll> v) {
	if (v[0] < l || r < v[2]) return;
	if (xr(v) > xr(ans)) ans = v;
}

void solve() {
	cin >> l >> r;
	ans = { 0, 0, 0 };
	for (ll i = 60; i >= 0; i--) {
		if (r - l < 2) break;
		ll h = (1ll << i);
		if ((l & h) == (r & h)) continue;
		ll m = l + h - l % h;
		upd({ m - 1, m, m + 1 });

		if (l == m - 1) { l = m; continue; }
		ll L = 0, R = i, M, x, a, b;
		while (R - L > 1) {
			M = (L + R) / 2;
			x = (1ll << M);
			((l | (x - 1)) == m - 1 ? R = M : L = M);
		}
		x = (1ll << L);
		a = l + x - l % x;
		b = r - r % (2 * x);
		upd({ a - 1, a, b });
		l = m;
	}
	for (int i : ans) cout << i << " ";
	cout << "\n";
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	int t;
	cin >> t;
	while (t--) solve();
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base30/100
1Elfogadva0/01ms316 KiB
2Hibás válasz0/021ms316 KiB
3Elfogadva5/51ms316 KiB
4Elfogadva5/51ms316 KiB
5Elfogadva5/51ms316 KiB
6Elfogadva5/51ms316 KiB
7Elfogadva5/54ms316 KiB
8Elfogadva5/59ms484 KiB
9Hibás válasz0/514ms484 KiB
10Hibás válasz0/521ms460 KiB
11Hibás válasz0/543ms444 KiB
12Hibás válasz0/545ms564 KiB
13Hibás válasz0/592ms696 KiB
14Időlimit túllépés0/6138ms804 KiB
15Időlimit túllépés0/6187ms948 KiB
16Időlimit túllépés0/6200ms1076 KiB
17Időlimit túllépés0/6187ms820 KiB
18Hibás válasz0/724ms316 KiB
19Időlimit túllépés0/7177ms948 KiB
20Időlimit túllépés0/7200ms1076 KiB