Cod sursa(job #2766684)

Utilizator nstefanNeagu Stefan nstefan Data 2 august 2021 20:48:23
Problema Xor Max Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <bits/stdc++.h>

#define filePrint(file, x) file << x
#define fileRead(x, file) file >> x
#define print(x) filePrint(std::cout, x)
#define read(x) fileRead(x, std::cin)
#define debugPrint(x) print(#x << ": " << x << '\n')
#define MAXNUMS 100000
#define __NAME_OF_THE_FILE__ "xormax"

std::ifstream fin(__NAME_OF_THE_FILE__ ".in");
std::ofstream fout(__NAME_OF_THE_FILE__ ".out");

size_t n;
size_t global_max;
size_t start;
size_t end;
std::array<unsigned int, 10000> arr = {0};

void setup();
void solve();

int main() {
  std::ios_base::sync_with_stdio(false);
  std::cin.tie(nullptr);
  setup();
  solve();

  return 0;
}

void setup() {
  fileRead(n, fin);
  for (size_t i = 0; i < n; i++) {
    fileRead(arr[i], fin);
  }
}

void solve() {
  // we find the greatest sum by using Kadalane's approach
  /*
    local_max = 9;
    global_max = 9; 3 vs 9
    1 -3 -8 4 2 3
                ^
            \start
                \end
                \flag
  */
  size_t local_max = 0;
  size_t flag = 0;

  for (size_t i = 0; i < n; i++) {
    local_max = std::max<unsigned int>(arr[i], arr[i] ^ local_max);

    if (local_max >= global_max) {
      global_max = local_max;
      if (i - flag == 1) {
        end++;
        flag++;
      } else {
        start = i;
        end = i;
        flag = i;
      }
    }
  }
  filePrint(fout, global_max << ' ' << start + 1 << ' ' << end + 1);
}