# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
635948 | Cross_Ratio | Super Dango Maker (JOI22_dango3) | C++17 | 2814 ms | 596 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "dango3.h"
#include <bits/stdc++.h>
using namespace std;
int Query(const vector<int>&);
void Answer(const vector<int>&);
vector<vector<int>> A;
vector<int> V;
void Solve(int N, int M) {
A.resize(N);
int i, j;
for(i=1;i<=N*M;i++) V.push_back(i);
random_shuffle(V.begin(),V.end());
vector<int> C;
int base = 0;
for(i=0;i<N;i++) {
int prv = N-i-1;
vector<int> B(M);
vector<bool> on(V.size());
for(j=0;j<V.size();j++) on[j] = true;
for(j=0;j<M;j++) B[j] = V.size() - (M-j-1);
for(j=0;j<M;j++) {
int s = prv;
int e = B[j];
while(s+1<e) {
int mid = (s+e)/2;
for(int k2=0;k2<mid;k2++) {
if(on[k2]) C.push_back(V[k2]);
}
int k = Query(C);
for(int k2=0;k2<mid;k2++) {
if(on[k2]) C.pop_back();
}
if(k>1&&k-1+j<M) B[k-1+j] = min(B[k-1+j], mid);
if(k==0) s = mid;
else e = mid;
}
for(int k=M-2;k>=0;k--) B[k] = min(B[k], B[k+1]);
A[i].push_back(V[s]);
on[s] = false;
}
for(int n : A[i]) C.push_back(n);
vector<int> V2;
for(j=0;j<V.size();j++) {
if(on[j]) V2.push_back(V[j]);
}
V = V2;
}
for(i=0;i<M;i++) {
vector<int> F;
for(j=0;j<N;j++) F.push_back(A[j][i]);
Answer(F);
}
}
Compilation message (stderr)
# | 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... |