제출 #589527

#제출 시각아이디문제언어결과실행 시간메모리
589527TheEvilBirdXOR (IZhO12_xor)C++17
0 / 100
2080 ms4940 KiB
#include <iostream> #include <iomanip> #include <cassert> #include <vector> #include <numeric> #include <string> #include <bitset> #include <cmath> #include <algorithm> #include <stack> #include <queue> #include <deque> #include <set> #include <unordered_set> #include <map> #include <unordered_map> #include <random> #include <ctime> #include <chrono> using namespace std; #define all(x) (x).begin(), (x).end() #define rall(x) (x).rbegin(), (x).rend() #define sz(x) (int)((x).size()) typedef unsigned int uint; typedef long long ll; typedef unsigned long long ull; //typedef __int128_t int128; typedef long double ld; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const char en = '\n'; const int INF = 1e9 + 7; const ll INFLL = 1e18; mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count()); #ifdef __APPLE__ #include "debug.h" //#define debug(...) 42 #else #define debug(...) 42 #endif const int N = 250'000; const int LOG = 4; int get_mask(int mask, int i) { return ((mask & (1 << i)) > 0); } void solve() { int n, x; cin >> n >> x; vector<int> a(n); for (int i = 0; i < n; ++i) { cin >> a[i]; } vector<vector<int>> pref(LOG, vector<int> (n + 1, 0)); vector<vector<int>> precalc(LOG, vector<int> (n + 1, -1)); for (int l = 0; l < LOG; ++l) { precalc[l][pref[l][0]] = 0; for (int i = 0; i < n; ++i) { pref[l][i + 1] = pref[l][i] + get_mask(a[i], l); precalc[l][pref[l][i + 1]] = i + 1; } } int ans = -1, idans = -1; auto chkmx = [&](int cur, int i) { if (cur > ans) { ans = cur; idans = i + 1; } }; for (int i = 0; i < n; ++i) { int y = 0; for (int j = i; j < n; ++j) { y ^= a[j]; if (y >= x) { chkmx(j - i + 1, i); } } } // for (int i = 0; i < n; ++i) { // int now = n - i; // for (int l = LOG - 1; l >= 0; --l) { // if (get_mask(x, l)) { // int cur_pref = pref[l][i + now] - pref[l][i]; // if (cur_pref == 0) { // now = -1; // break; // } // if (cur_pref % 2 == 0) { // --cur_pref; // int pos = precalc[l][cur_pref]; // now = min(now, pos - i); // } // } // else { // int cur = now; // int cur_pref = pref[l][i + now] - pref[l][i]; // if (cur_pref == 0) { // cur = -1; // } // else if (cur_pref % 2 == 0) { // --cur_pref; // int pos = precalc[l][cur_pref]; // cur = min(cur, pos - i); // } // chkmx(cur, i); // } // } // chkmx(now, i); // } assert(ans != -1); cout << idans << ' ' << ans << en; } int main() { #ifdef __APPLE__ freopen("input.txt", "r", stdin); #else ios_base::sync_with_stdio(0); cin.tie(0); #endif solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...