# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1212555 | dima2101 | Super Dango Maker (JOI22_dango3) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
#include "dango3.h"
int GetMax(const std::vector<int> &x, int n, int m)
{
std::vector<bool> used(n * m + 1, false);
for (int i : x)
{
used[x] = true;
}
std::vector<int> now;
for (int i = 0; i < n * m; i++)
{
if (!used[i + 1])
{
now.push_back(i + 1);
}
}
return m - Query(now);
}
void Solve(int n, int m)
{
std::vector<std::vector<int>> ans(m);
for (int i = 1; i <= n * m; i++)
{
int l = -1, r = m;
while (l + 1 < r)
{
int mid = (l + r) / 2;
ans[mid].push_back(i);
if (GetMax(ans[mid], n, m) == 2)
{
l = mid;
}
else
{
r = mid;
}
ans[mid].pop_back();
}
// assert(r != m);
ans[r].push_back(i);
}
for (int i = 0; i < m; i++)
{
Answer(ans[i]);
}
}