# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1212548 | dima2101 | Super Dango Maker (JOI22_dango3) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
#include "dango3.h"
#define int long long
int GetMax(const std::vector<int> &x, int n, int m)
{
std::set<int> s;
for (int i = 1; i <= n * m; i++)
{
s.insert(i);
}
for (int j : x)
{
s.erase(j);
}
std::vector<int> now;
for (int j : s)
{
now.push_back(j);
}
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.pop_back();
}
assert(r != m);
ans[r].push_back(i);
}
for (int i = 0; i < m; i++)
{
Answer(ans[i]);
}
}