This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "minerals.h"
#include <bits/stdc++.h>
using namespace std;
#define SZ(x) int((x).size())
const int MAXN = 1e5 + 10;
const int LOG = 16;
int n , cnt , L[MAXN] , M[MAXN] , R[MAXN] , mark[MAXN];
vector<int> v1 , v2 , Q[MAXN];
int query(int ind , int x){
cnt -= mark[x];
mark[x] ^= 1;
cnt += mark[x];
int res = Query(x);
if(ind % 2 == 0){
return res;
}
return n + res - cnt;
}
void Solve(int N) {
n = N;
for(int i = 1 ; i <= 2 * n ; i++){
int x = query(0 , i);
if(x == SZ(v1)){
v2.push_back(i);
}
else{
v1.push_back(i);
}
}
for(int i = 0 ; i < n ; i++){
L[i] = -1; R[i] = n - 1;
}
for(int i = 0 ; i < LOG ; i++){
for(int j = 0 ; j < n ; j++){
Q[j].clear();
}
for(int j = 0 ; j < n ; j++){
M[j] = max(0 , (R[j] + L[j]) / 2);
Q[M[j]].push_back(j);
}
for(int j = 0 ; j < n ; j++){
int x = query(i + 1 , v1[j]);
for(int k : Q[j]){
int y = query(i + 1 , v2[k]);
if(x != y){
L[k] = M[k];
}
else{
R[k] = M[k];
}
x = y;
}
}
}
for(int i = 0 ; i < n ; i++){
Answer(v2[i] , v1[R[i]]);
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |