Submission #561624

#TimeUsernameProblemLanguageResultExecution timeMemory
561624DanShadersSuper Dango Maker (JOI22_dango3)C++17
100 / 100
792 ms784 KiB
//bs:sanitizers,flags:grader.cpp
#include "dango3.h"
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace std;

namespace x = __gnu_pbds;
template <typename T>
using ordered_set = x::tree<T, x::null_type, less<T>, x::rb_tree_tag, x::tree_order_statistics_node_update>;

template <typename T>
using normal_queue = priority_queue<T, vector<T>, greater<>>;

#define all(x) begin(x), end(x)
#define sz(x) ((int) (x).size())
#define x first
#define y second
using ll = long long;
using ld = long double;

void rec(const vector<int> &inds, int m) {
	// cout << m << ": ";
	// for (int u : inds) {
	// 	cout << u << " ";
	// }
	// cout << "\n";
	if (m == 1) {
		Answer(inds);
		return;
	}
	int mid = m / 2;
	vector<int> lef, rig = inds;
	for (int i : inds) {
		rig.erase(find(all(rig), i));
		if (Query(rig) < mid) {
			// cout << "" << i << " remains in rig" << endl;
			rig.push_back(i);
		} else {
			// cout << "add " << i << " to lef" << endl;
			lef.push_back(i);
		}
	}
	rec(lef, m - mid);
	rec(rig, mid);
}

void Solve(int n, int m) {
	vector<int> inds(n * m);
	iota(all(inds), 1);
	rec(inds, m);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...