Advertisement
FyanRu

Untitled

Oct 31st, 2022
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.87 KB | Source Code | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. using ll = long long;
  4.  
  5. void solve() {
  6.    
  7.     /*********
  8.     * Inputs *
  9.     *********/
  10.    
  11.     int n; cin >> n;
  12.     int q; cin >> q; //q is 1
  13.    
  14.     int arr[n];
  15.     for (int i = 0; i < n; i++) {
  16.         cin >> arr[i];
  17.     }
  18.    
  19.     /********
  20.     * Calcs *
  21.     ********/
  22.    
  23.     ll tSum = 0; //total sum
  24.     ll tXor = 0; //total xor
  25.     ll tMax; //max value
  26.    
  27.     for (int i = 0; i < n; i++) {
  28.         tSum += arr[i];
  29.         tXor ^= arr[i];
  30.     }
  31.    
  32.     tMax = tSum - tXor;
  33.    
  34.     if (tMax == 0) {
  35.         cout << "1 1\n";
  36.         return;
  37.     }
  38.    
  39.     //
  40.    
  41.     ll cSum = tSum;
  42.     ll cXor = tXor;
  43.     ll cMax = tMax;
  44.    
  45.     int e1 = 0; // inclusive bound
  46.     int e2 = n-1; // inclusive bound
  47.    
  48.     for (int i = n-1; i > -1; i--) {
  49.         cSum -= arr[i];
  50.         cXor ^= arr[i];
  51.         cMax = cSum - cXor;
  52.         if (cMax == tMax) {
  53.             e2--;
  54.         } else {
  55.             cSum += arr[i];
  56.             cXor ^= arr[i];
  57.             cMax = cSum - cXor;
  58.             break;
  59.         }
  60.     }
  61.    
  62.     //
  63.    
  64.     for (int i = 0; i < n; i++) {
  65.         cSum -= arr[i];
  66.         cXor ^= arr[i];
  67.         cMax = cSum - cXor;
  68.         if (cMax == tMax) {
  69.             e1++;
  70.         } else {
  71.             cSum += arr[i];
  72.             cXor ^= arr[i];
  73.             cMax = cSum - cXor;
  74.             break;
  75.         }
  76.     }
  77.    
  78.     /**
  79.    
  80.     for (int rb = e2+1; rb < n; rb++) {
  81.         cSum += arr[rb];
  82.         cXor ^= arr[rb];
  83.         cMax = cSum - cXor;
  84.        
  85.         while (cMax == tMax) {
  86.             e1++;
  87.            
  88.         }
  89.        
  90.        
  91.     }**/
  92.    
  93.     cout << e1+1 << " " << e2+1 << "\n";
  94.    
  95. }
  96.  
  97. int main() {
  98.     int t; cin >> t;
  99.     for (int i = 0; i < t; i++) {
  100.         solve();
  101.         int a; cin >> a; cin >> a;
  102.     }
  103.     return 0;
  104. }
  105.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement