Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <assert.h>
- #include <algorithm>
- #include <array>
- #include <chrono>
- #include <fstream>
- #include <functional>
- #include <iomanip>
- #include <iostream>
- #include <map>
- #include <numeric>
- #include <optional>
- #include <queue>
- #include <random>
- #include <set>
- #include <sstream>
- #include <string>
- #include <thread>
- #include <unordered_map>
- #include <unordered_set>
- #include <variant>
- #include <vector>
- using namespace std;
- const long long MOD = 1400305337;
- const long long MOD2 = 1e9 + 9;
- vector<int> a;
- int n;
- int mex[5001][5001];
- unordered_set<int> v[5005];
- int ans = 0;
- void solve(int i, int prev) {
- ans = max(ans, prev);
- if (i == n) return;
- if (v[i].count(prev)) return;
- v[i].insert(prev);
- for (int j = 0; j + i < n; ++j) {
- solve(i + j + 1, prev);
- solve(i + j + 1, prev ^ mex[i][i + j]);
- }
- }
- signed main(int64_t argc, char** argv) {
- ios::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- int t;
- cin >> t;
- while (t--) {
- cin >> n;
- a.resize(n);
- for (auto& e : a) cin >> e;
- for (int i = 0; i < n; ++i) v[i].clear();
- for (int i = 0; i < n; ++i) {
- set<int> x;
- for (int j = 0; j <= n + 1; ++j) x.insert(j);
- for (int j = i; j < n; ++j) {
- x.erase(a[j]);
- mex[i][j] = *x.begin();
- }
- }
- ans = 0;
- solve(0, 0);
- cout << ans << "\n";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement