#include "dango3.h"
#include <bits/stdc++.h>
using namespace std;
#define coutarr(x) for (auto &it : x) cout<<it<<" ";cout<<endl;
vector<int> concat(vector<int> a, vector<int> b){
vector<int> ret = a;
for (auto it : b) ret.push_back(it);
for (auto &it : ret) it++;
return ret;
}
void Solve(int N, int M) {
swap(N,M);
vector<bool> decided(N * M, false);
vector<vector<int>> dango(M);
for (int i = 0; i < M; i++){
vector<int> cur;
for (int j = 0; j < N * M; j++){
if (decided[j]) cur.push_back(j);
}
vector<int> h;
function<void(int,int,int)> solve = [&](int l, int r, int c)->void{
if (c == 0) return;
if (r - l + 1 == c){
for (int i = l; i <= r; i++){
decided[h[i]] = true;
}
return;
}
int m = l + r >> 1;
int left = Query(concat(cur,vector<int>(h.begin()+l,h.begin()+m+1)));
solve(l,m,left);
solve(m+1,r,c-left);
};
for (int j = 0; j < N * M; j++){
if (decided[j]) continue;
h.push_back(j);
if (h.size() == M){
solve(0,h.size()-1,Query(concat(cur,h)));
for (auto it : h){
if (decided[it]) dango[i].push_back(it);
else cur.push_back(it);
}
h.clear();
}
}
if (h.size() > 0){
solve(0,h.size()-1,Query(concat(cur,h)));
for (auto it : h){
if (decided[it]) dango[i].push_back(it);
else cur.push_back(it);
}
h.clear();
}
}
for (int i = 0; i < N; i++){
vector<int> a;
for (int j = 0; j < M; j++){
a.push_back(dango[j][i]+1);
}
Answer(a);
}
}
//3 3 1 2 1 2
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |