#include "minerals.h"
#include<bits/stdc++.h>
using namespace std;
void Solve(int n)
{
const int N=n*2;
int last=0;
vector<int>A,B;
vector<int>L;
vector<int>g(N+1);
for(int i=1;i<=N;i++){g[i]=i;}
mt19937 rng(2137);
shuffle(g.begin()+1,g.end(),rng);
for(int i=1;i<=N;i++)
{
int u=g[i];
int t=Query(u);
if(t!=last){A.push_back(u);}
else{B.push_back(u);L.push_back(A.size());}
last=t;
}
vector<pair<int,int>>G(n);
for(int i=0;i<n;i++)
{
G[i]={0,L[i]-1};
}
vector<vector<int>>V(n);
bool Gyat=1;
while(true)
{
bool cv=0;
for(int i=0;i<n;i++)
{
if(G[i].first==G[i].second){continue;}
cv=1;
const int mid=(G[i].first+G[i].second)>>1;
V[mid].push_back(i);
}
if(cv==0){break;}
if(Gyat==0)
{
for(int i=0;i<n;i++)
{
last=Query(A[i]);
for(int u : V[i])
{
int t=Query(B[u]);
if(t==last)
{
G[u].second=i;
}
else
{
G[u].first=i+1;
}
last=t;
}
V[i].clear();
}
}
else
{
for(int i=n-1;i>=0;i--)
{
for(int u : V[i])
{
int t=Query(B[u]);
if(t==last)
{
G[u].second=i;
}
else
{
G[u].first=i+1;
}
last=t;
}
last=Query(A[i]);
V[i].clear();
}
}
Gyat^=1;
}
for(int i=0;i<n;i++)
{
Answer(A[G[i].first],B[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... |