Submission #1244274

#TimeUsernameProblemLanguageResultExecution timeMemory
1244274minhpkLibrary (JOI18_library)C++20
100 / 100
126 ms516 KiB
#include <bits/stdc++.h>
#include "library.h"
using namespace std;
int n;
vector <int> res;
int del[1000005];
int ask(vector<int> q){
    vector <int> q1(n);
    for (auto p:q){
         q1[p-1]=1;
    }
    return Query(q1);
}

void Solve(int N){
    if (N==1){
        vector <int> pre;
        pre.push_back(1);
        Answer(pre);
        return;
    }
    n=N;
    int a=N;
    int sta;
    for (int i=1;i<=a;i++){
        vector <int> pre;
        for (int j=1;j<=a;j++){
             if (j==i){
                continue;
             }
             pre.push_back(j);
        }
        int val=ask(pre);
        if (val==1){
            sta=i;
            break;
        }
    }
    int last=sta;
    del[sta]=1;
    res.push_back(sta);
    for (int i=2;i<=a;i++){
         vector <int> pre;
         for (int j=1;j<=a;j++){
             if (del[j]){
                continue;
             }
             pre.push_back(j);
         }

         int l=0;
         int r=pre.size()-1;
         int pos=0;
         while (l<=r){
             int mid=(l+r)/2;
             vector <int> pre1(pre.begin(),pre.begin()+mid+1);
             int val=ask(pre1);
             pre1.push_back(last);
             int val1=ask(pre1);
             if (val==val1){
                 pos=mid;
                 r=mid-1;
             }else{
                 l=mid+1;
             }
         }
         int x=pre[pos];
         res.push_back(x);
         del[x]=1;
         last=x;
    }
    Answer(res);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...