Submission #1149214

#TimeUsernameProblemLanguageResultExecution timeMemory
1149214sh3lanXOR (IZhO12_xor)C++20
0 / 100
1 ms320 KiB
#include <bits/stdc++.h> using namespace std; #include<ext/pb_ds/assoc_container.hpp> #include<ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set; // find_by_order, order_of_key #define all(v) v.begin(), v.end() #define ll long long #define en cout << endl; #define memo(arr, val) memset(arr, val, sizeof(arr)) #define int long long #define f first #define s second #define sz(s) (int)(s).size() #define rep(i, st, ed) for (int i = st; i < ed; i++) bool valid(int i, int j, int n, int m) { return i < n && i >= 0 && j < m && j >= 0; } int inf = 1e18; void Sh3lan() { ios::sync_with_stdio(0); cin.tie(NULL); cout.tie(0); #ifndef ONLINE_JUDGE freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); freopen("errors.txt", "w", stderr); #endif } int mod = 1e9 + 7; int mul(int a, int b) { return ((a % mod) * (b % mod)) % mod; } int add(int a, int b) { return ((a % mod) + (b % mod)) % mod; } int sub(int a, int b) { return ((a % mod) - (b % mod) + mod) % mod; } int GCD(int a, int b) { return b == 0 ? a : GCD(b, a % b); } int LCM(int a, int b) { return a / GCD(a, b) * b; } int fast(int a, int m) { if (m == 0) return 1; int x = fast(a, m / 2); x = mul(x, x); if (m & 1) x = mul(x, a); return x % mod; } int dx[] = {1, -1, 0, 0, 1, -1, 1, -1}; int dy[] = {0, 0, 1, -1, 1, -1, -1, 1}; const int N = 2e3 + 5; struct Node { int ch[2] = {}; int sz = 0; int &operator[](int i) { return ch[i]; } }; struct Trie { vector<Node> trie; Trie() { newNode(); } int newNode() { trie.emplace_back(); return trie.size() - 1; } void update(int x, int op) { int cur = 0; for (int i = 30; i >= 0; i--) { int bit = (x >> i & 1); if (trie[cur][bit] == 0) { trie[cur][bit] = newNode(); } cur = trie[cur][bit]; trie[cur].sz += op; } } int size(int c) { return trie[c].sz; } int query(int &x,int mid) { int cur = 0, res = 0; for (int i = 20; ~i; i--) { int bit = x >> i & 1; int mid_bit = mid >> i & 1; int xr = bit ^ mid_bit; if (mid_bit) { res += size(trie[cur][bit]); } if (size(trie[cur][xr])) { cur = trie[cur][xr]; } else { return res; } } return res + size(cur); } }; void solve() { int n, x; cin >> n >> x; vector<int> a(n); Trie t; vector<int> prf(n + 1); for (auto i = 0; i < n; i++) { cin >> a[i]; t.update(a[i], 1); // prf[i + 1] = prf[i] ^ a[i]; } int mx = 0, idx = -1; for (int i = 0; i < n; i++) { t.update(a[i], -1); int cur = t.query(a[i], x); if (cur > mx) { mx = cur; idx = i + 2; } t.update(prf[i], -1); } cout << idx << " " << mx << endl; } signed main() { Sh3lan(); int t = 1; // cin >> t; while (t--) { solve(); } return 0; }

Compilation message (stderr)

xor.cpp: In function 'void Sh3lan()':
xor.cpp:32:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   32 |     freopen("input.txt", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
xor.cpp:33:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   33 |     freopen("output.txt", "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
xor.cpp:34:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   34 |     freopen("errors.txt", "w", stderr);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...