Submission #1256397

#TimeUsernameProblemLanguageResultExecution timeMemory
1256397tvgkLibrary (JOI18_library)C++20
0 / 100
10 ms452 KiB
#include <cstdio>
#include <vector>
#include "library.h"
#include<bits/stdc++.h>
using namespace std;
#define task "a"
#define se second
#define fi first
#define ll long long
#define ii pair<ll, ll>
const long mxN = 1e3 + 7;

vector<int> w[mxN], ans;
int cnt[mxN], n;

int Ask(int u, int v)
{
    vector<int> vc(n);
    int res = v - u + 1;
    for (int i = u; i <= v; i++)
    {
        vc[i - 1] = 1;
        res -= cnt[i];
    }

    return Query(vc) - res;
}

void DFS(int j, int par)
{
    ans.push_back(j);
    for (int i : w[j])
    {
        if (par == i)
            continue;
        DFS(i, j);
    }
}

void Solve(int N)
{
    n = N;
    int edge = 0;
    for (int i = 1; i <= n; i++)
    {
        while (Ask(1, i))
        {
            int l = 1, r = i, ans = 1;
            while (l <= r)
            {
                int mid = (l + r) / 2;
                if (Ask(mid, i))
                {
                    ans = mid;
                    l = mid + 1;
                }
                else
                    r = mid - 1;
            }

            cnt[ans]++;
            w[ans].push_back(i);
            w[i].push_back(ans);

            edge++;
        }
    }

    assert(edge == n - 1);

    for (int i = 1; i <= n; i++)
    {
        if (w[i].size() == 1)
        {
            DFS(i, 0);
            break;
        }
    }

	Answer(ans);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...