Pagini recente » Monitorul de evaluare | Cod sursa (job #3319951) | Cod sursa (job #3240758) | Cod sursa (job #1044522) | Cod sursa (job #3317804)
//https://infoarena.ro/problema/xormax
#pragma GCC optimize ("Ofast")
#pragma GCC optimize ("fast-math")
#pragma GCC optimize ("unroll-loops")
#define _USE_MATH_DEFINES
#include <iostream>
#include <fstream>
//#include <vector>
#include <cstring>
//#include <cmath>
//#include <bitset>
//#include <queue>
//#include <stack>
//#include <utility>
#include <algorithm>
//#include <string>
//#include <map>
//#include <unordered_map>
//#include <set>
//#include <unordered_set>
//#include <cstdint>
//#include <climits>
//#include <iomanip>
//#include <cstdio>
//#include <tuple>
using namespace std;
ifstream fin("xormax.in");
ofstream fout("xormax.out");
const int NRMAX = 100000;
const int NRCIF = 21;
int v[NRMAX + 5];
struct Nod
{
int ind;
Nod* ch[2];
Nod() : ind{ 0 }, ch {} {};
};
void insert(Nod* nod, int x, int ind)
{
for (int i = NRCIF - 1; i >= 0; --i)
{
int nr = (x >> i) & 1;
if (!nod->ch[nr])
nod->ch[nr] = new Nod();
nod = nod->ch[nr];
}
nod->ind = ind;
}
int rezolvare(Nod* nod, int x)
{
for (int i = NRCIF - 1; i >= 0; --i)
{
int nr = (x >> i) & 1;
int invnr = nr ^ 1;
if (nod->ch[invnr])
nod = nod->ch[invnr];
else
nod = nod->ch[nr];
}
return nod->ind;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, i, x, ix = 0;
int rez = 0, st = 1, dr = 1;
Nod* rad = new Nod();
insert(rad, 0, 0);
fin >> n;
for (i = 1; i <= n; ++i)
{
fin >> x;
ix ^= x;
v[i] = ix;
insert(rad, ix, i);
int nr = rezolvare(rad, ix);
if ((v[i] ^ v[nr]) > rez)
{
rez = v[i] ^ v[nr];
st = nr + 1;
dr = i;
}
}
fout << rez << " " << st << " " << dr;
return 0;
}