Submission #202407

#TimeUsernameProblemLanguageResultExecution timeMemory
202407EntityITLibrary (JOI18_library)C++14
0 / 100
648 ms262148 KiB
#include "library.h"
#include<bits/stdc++.h>

using namespace std;

#define all(x) (x).begin(), (x).end()
#define sz(x) ( (int)(x).size() )
using LL = long long;

void Solve(int N) {
  vector<int> pref(N);
  vector<int> ele(N);
  for (int i = 0; i < N; ++i) {
    fill(all(ele), 0);
    fill(ele.begin(), ele.begin() + i + 1, 1);
    pref[i] = Query(ele);
  }

  vector<vector<int> > gr(N);
  for (int i = 1; i < N; ++i) if (pref[i] ^ pref[i - 1]) {
    int l = 0, r = i - 1;
    while (l < r) {
      int mid = (l + r) >> 1;
      fill(all(ele), 0);
      fill(ele.begin(), ele.begin() + mid + 1, 1);
      ele[i] = 1;
      if (Query(ele) != pref[mid]) r = mid;
      else l = mid + 1;
    }

    gr[i].emplace_back(l);
    gr[l].emplace_back(i);

    if (pref[i] - pref[i - 1] > 1) {
      l = 0, r = i - 1;
      while (l < r) {
        int mid = (l + r) >> 1;
        fill(all(ele), 0);
        fill(ele.begin(), ele.begin() + mid + 1, 1);
        ele[i] = 1;
        if (Query(ele) - pref[mid] > 1) r = mid;
        else l = mid + 1;
      }

      gr[i].emplace_back(l);
      gr[l].emplace_back(i);
    }
  }

  int rt = -1;
  for (int u = 0; u < N; ++u) if (sz(gr[u]) == 1) rt = u;

  vector<bool> vis(N);
  vector<int> ans;
  for (int u = rt; ; ) {
    vis[u] = true;
    ans.emplace_back(u);
    for (int v : gr[u]) if (!vis[v]) u = v;
  }

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