제출 #997313

#제출 시각아이디문제언어결과실행 시간메모리
99731312345678Minerals (JOI19_minerals)C++17
40 / 100
14 ms4828 KiB
#include "minerals.h"
#include <bits/stdc++.h>

using namespace std;

const int nx=5e4+5;

int n, p, c, l[nx], r[nx];
vector<int> used, v, qrs[nx];

void Solve(int N) {
    v.push_back(0);
    used.push_back(0);
    for (int i=1; i<=2*N; i++)
    {
        c=Query(i);
        if (c==p) v.push_back(i);
        else used.push_back(i), p=c;
    }
    for (int i=1; i<=2*N; i++) Query(i);
    for (int i=1; i<=N; i++) l[i]=1, r[i]=N;
    while (1)
    {
        bool f=1;
        //cout<<"bsearch\n";
        //for (int i=1; i<=N; i++) cout<<i<<' '<<l[i]<<' '<<r[i]<<'\n';
        for (int i=1; i<=N; i++) qrs[i].clear();
        for (int i=1; i<=N; i++) if (l[i]!=r[i]) f=0, qrs[(l[i]+r[i])/2].push_back(i);
        if (f) break;
        for (int i=1; i<=N; i++)
        {
            p=Query(used[i]);
            for (auto x:qrs[i])
            {
                c=Query(v[x]);
                if (c==p) r[x]=i;
                else l[x]=i+1;
                p=Query(v[x]);
            }
        }
        for (int i=1; i<=N; i++) Query(used[i]);
    }
    for (int i=1; i<=N; i++) Answer(v[i], used[l[i]]);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...