이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "dango3.h"
#include <bits/stdc++.h>
using namespace std;
const int MX=400*25+5;
bool used[MX], onstk[MX];
int N,M;
map<vector<int>,int> memo;
int ask(int l, int r) {
        vector<int> qry;
        for(int i=l;i<=r;i++) {
                if(used[i]||onstk[i]) continue;
                qry.push_back(i);
        }
        for(int i=1;i<=N*M;i++) {
                if(onstk[i]) qry.push_back(i);
        }
        sort(qry.begin(),qry.end());
        if(memo.count(qry)) return memo[qry];
        return memo[qry]=Query(qry);
}       
void Solve(int NN, int MM) {
        N=NN, M=MM;
        for(int i=1;i<=M;i++) {
                vector<int> v;
                int lst=N*M;
                for(int j=1;j<=N;j++) {
                        int l=1,r=lst,res=0;
                        while(l<=r) {
                                int mid=(l+r)/2;
                                if(ask(1,mid)>=1) {
                                        res=mid,r=mid-1;
                                } else {
                                        l=mid+1;
                                }
                        }
                        v.push_back(res);
                        onstk[res]=true;
                        lst=res-1;
                }
                Answer(v);
                for(auto x:v) {
                        onstk[x]=false;
                        used[x]=true;
                }
        }
}
| # | 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... |