# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1271233 | Double_Slash | Super Dango Maker (JOI22_dango3) | C++20 | 0 ms | 0 KiB |
#include "dango3.h"
#include <bits/stdc++.h>
using namespace std;
#define all(x) x.begin(), x.end()
void Solve(int N, int M) {
bool dead[N * M + 1]{};
for (int t = M; t--;) {
vector<int> rem;
for (int i = 1; i <= N * M; ++i) {
if (not dead[i]) rem.emplace_back(i);
}
vector<int> a;
for (int i = N, last = rem.size(); i--;) {
int j = last;
for (int k = 2 << __lg(j); k >>= 1;) {
if (j - k >= N - a.size()) {
vector<int> b(rem.begin(), rem.begin() + j - k);
b.insert(b.end(), all(a));
if (Query(b)) j -= k;
}
}
a.emplace_back(rem[last = j - 1]);
}
Answer(a);
for (int i: a) dead[i] = true;
}
}