fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define int long long
  4. const int inf = 1e15;
  5. int MAX = 1000005;
  6. const int N = 31;
  7. struct node {
  8. int adj[2]{};
  9. int &operator[](int i) { return adj[i]; }
  10. };
  11.  
  12. struct Trie {
  13. vector<node> trie;
  14.  
  15. int newnode() {
  16. trie.emplace_back();
  17. return trie.size() - 1;
  18. }
  19.  
  20. void init() {
  21. newnode();
  22. }
  23.  
  24. int update(int val) {
  25. int u = 0;
  26. for (int i = N-1; ~i; i--) {
  27. int v = (val >> i) & 1;
  28. if (!trie[u][v]) {
  29. trie[u][v] = newnode();
  30. }
  31. u = trie[u][v];
  32. }
  33.  
  34. u = 0;
  35. int ans{};
  36. for (int i = N-1; ~i; i--) {
  37. int v = (val >> i)& 1;
  38. if (trie[u][!v]) {
  39. u = trie[u][!v];
  40. }
  41. else {
  42. u = trie[u][v];
  43. ans += (1ll << i);
  44. }
  45. }
  46. return ans;
  47. }
  48. };
  49.  
  50.  
  51. void solve() {
  52. int n, x, Xor{}; cin >> n >> x;
  53. vector<int> v(n);
  54. Trie t;
  55. t.init();
  56. t.update(0);
  57. map<int, int> mp;
  58. mp[0] = -1;
  59. array<int, 3> ans{};
  60. for (int i = 0; i < n; i++) {
  61. cin >> v[i];
  62. Xor ^= v[i];
  63. if (!mp.count(v[i])) {
  64. mp[v[i]] = i;
  65. }
  66.  
  67. int tmp = t.update(v[i]);
  68. if (Xor ^ tmp > ans[0] and Xor ^ tmp >= x) {
  69. if (Xor ^ tmp == ans[0] and ans[2] > i - mp[tmp]) continue;
  70. ans[0] = Xor ^ tmp;
  71. ans[1] = mp[tmp] + 1;
  72. ans[2] = i - mp[tmp] + 1;
  73. }
  74. }
  75.  
  76. cout << ans[1] + 1 << ' ' << ans[2] << '\n';
  77. }
  78.  
  79. signed main()
  80. {
  81. ios_base::sync_with_stdio(false);
  82. cin.tie(0);
  83. cout.tie(0);
  84. int t = 1;
  85. // cin >> t;
  86. for (int i = 1; i <= t; i++) {
  87. solve();
  88. }
  89. }
Success #stdin #stdout 0s 5316KB
stdin
Standard input is empty
stdout
1 0