#include "Memory2_lib.h"
#include <bits/stdc++.h>
using namespace std;
mt19937 rng(69);
void solve(vector<int> nos, vector<int> idx) {
int n = idx.size() / 2;
if(n == 1) {
Answer(idx[0], idx[1], nos[0]);
return;
}
int rnd = rng() % (2 * n);
int res[2 * n];
for(int i=0;i<2*n;i++)
if(i != rnd)
res[i] = lower_bound(nos.begin(),nos.end(),Flip(idx[i], idx[rnd]))-nos.begin();
res[rnd] = -1e9;
int freq[n];
memset(freq,0,sizeof(freq));
for(int i=0;i<2*n;i++)
if(i!=rnd)
freq[res[i]]++;
int mn = 0;
for(int i=0;i<n;i++)
if(freq[i] & 1)
mn = i;
vector<int> nwno, nwpos;
int ans[n];
memset(ans,-1,sizeof(ans));
for(int i=0;i<2*n;i++) {
if(i==rnd || res[i]==mn)
nwpos.push_back(idx[i]);
else if(ans[res[i]] == -1)
ans[res[i]] = idx[i];
else
Answer(idx[i], ans[res[i]], nos[res[i]]);
}
for(int i=0;i<n;i++)
if(ans[i] == -1)
nwno.push_back(nos[i]);
solve(nwno, nwpos);
}
void Solve(int T, int N){
vector<int> v(2*N), u(N);
iota(v.begin(),v.end(),0);
iota(u.begin(),u.end(),0);
solve(u, v);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |