orazma

a.cpp

Jul 15th, 2026
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.02 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define f first
  3. #define s second
  4. #define ll long long
  5. #define pb push_back
  6. #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
  7. #define mk make_pair
  8. using namespace std;
  9.  
  10. const int MAXN = 1e6 + 5;
  11. const int INF = 1e9 + 7;
  12. const int MOD = 1e9 + 7;
  13.  
  14. struct trie{
  15.     int links[2];
  16.     int cnt = 0;
  17.     bool leaf = 0;
  18. } t[MAXN];
  19. int vertex = 0;
  20.  
  21. void add(ll mask){
  22.     int v = 0;
  23.     t[v].cnt++;
  24.     for (int i = 40; i >= 0; i--){
  25.         int bit = (mask >> i) & 1;
  26.         if (t[v].links[bit] == -1){
  27.             vertex++;
  28.             t[v].links[bit] = vertex;
  29.             t[vertex].links[0] = -1;
  30.             t[vertex].links[1] = -1;
  31.         }
  32.         v = t[v].links[bit];
  33.         t[v].cnt++;
  34.     }
  35. }
  36.  
  37. void del(ll mask){
  38.     int v = 0;
  39.     t[v].cnt--;
  40.     for (int i = 40; i >= 0; i--){
  41.         int bit = (mask >> i) & 1;
  42.         v = t[v].links[bit];
  43.         t[v].cnt--;
  44.     }
  45. }
  46.  
  47. ll ffind(ll mask){
  48.     int v = 0;
  49.     ll xxor = 0;
  50.     for (int i = 40; i >= 0; i--){
  51.         int bit = (mask >> i) & 1;
  52.         if (t[v].links[1 ^ bit] != -1 && t[t[v].links[1 ^ bit]].cnt > 0){
  53.             v = t[v].links[1 ^ bit];
  54.             xxor ^= (1LL << i);
  55.         }
  56.         else{
  57.             v = t[v].links[bit];
  58.         }
  59.     }
  60.     return xxor;
  61. }
  62.  
  63. void solve(int Test){
  64.     for (int i = 0; i < 26; i++){
  65.         t[0].links[i] = -1;
  66.     }
  67.     int n;
  68.     cin >> n;
  69.     a[0] = 0;
  70.     for (int i = 1; i <= n; i++){
  71.         cin >> a[i];
  72.     }
  73.     suf[n + 1] = 0;
  74.     add(0);
  75.     add(0);
  76.     suf[0] = 0;
  77.     for (int i = n; i >= 1; i--){
  78.         suf[i] = suf[i + 1] ^ a[i];
  79.         add(suf[i]);
  80.     }
  81.     ll pref = 0;
  82.     ll ans = 0;
  83.     for (int i = 0; i <= n; i++){
  84.         pref ^= a[i];
  85.         del(suf[i]);
  86.  
  87.         ll best_xor = ffind(pref);
  88.         ans = max(ans, best_xor);
  89.     }
  90.  
  91.     cout << ans << "\n";
  92. }
  93.  
  94. main() {
  95.     IOS;
  96.     srand(time(0));
  97.     int t = 1;
  98.     cin >> t;
  99.     int T = 1;
  100.     while(t--){
  101.         solve(T);
  102.         T++;
  103.     }
  104. }
  105.  
Advertisement
Add Comment
Please, Sign In to add comment