Submission #1305784

#TimeUsernameProblemLanguageResultExecution timeMemory
1305784basicLibrary (JOI18_library)C++20
100 / 100
69 ms484 KiB
#include "library.h"
#include <bits/stdc++.h>
#define C(a, b) ed[a].push_back(b), ed[b].push_back(a);
using namespace std;
int k, l[1010], s, e, d, bf, kk;
map<int, int> t;
vector<int> ed[1010], rs;
void dfs(int x, int f) {
	rs.push_back(x);
	for (auto i : ed[x])
		if (i != f)
			dfs(i, x);
}
void Solve(int n) {
	vector<int> m(n), p;
	m[0] = 1, t[1] = 1, bf = 1;
	for (int i = 2; i <= n; i++) {
		m[i - 1] = 1, k = Query(m);
		if (k > bf)
			t[i] = i;
		else {
			vector<int> b;
			for (auto [l, r] : t)
				if (l < r)
					b.push_back(l);
			for (auto [l, r] : t)
				if (l == r)
					b.push_back(l);
			for (auto [l, r] : t)
				if (l > r)
					b.push_back(l);
			for (s = 0, e = b.size() - 1; s < e;) {
				p = m, d = s + e >> 1, kk = k;
				for (int i = s; i <= d; i++)
					p[b[i] - 1] = 0, kk -= t[b[i]] == b[i];
				if (Query(p) > kk)
					e = d;
				else
					s = d + 1;
			}
			int x = b[s], y = t[b[s]];
			t[y] = i, t[i] = y;
			if (x ^ y)
				t.erase(x);
			C(x, i);
			if (k < bf) {
				b.erase(b.begin() + s);
				if (x ^ y)
					b.erase(find(b.begin(), b.end(), y));
				for (s = 0, e = b.size() - 1; s < e;) {
					p = m, d = s + e >> 1, kk = k;
					for (int i = s; i <= d; i++)
						p[b[i] - 1] = 0, kk -= t[b[i]] == b[i];
					if (Query(p) > kk)
						e = d;
					else
						s = d + 1;
				}
				int x = b[s], y = t[b[s]], z = t[i];
				t[y] = z, t[z] = y, t.erase(i);
				if (x ^ y)
					t.erase(x);
				C(x, i);
			}
		}
		bf = k;
	}
	for (int i = 1; i <= n; i++) {
		if (ed[i].size() < 2) {
			dfs(i, 0);
			Answer(rs);
			return;
		}
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...