제출 #1193770

#제출 시각아이디문제언어결과실행 시간메모리
1193770chaeryeongFinding Routers (IOI20_routers)C++20
74.52 / 100
1 ms328 KiB
#include "routers.h"
#include <bits/stdc++.h>
using namespace std;
std::vector<int> find_routers(int l, int n, int q) {
	vector <int> ret;
	ret.push_back(0);
	int B = 1;
	for (int i = 2; i <= l; i++) {
		int x = (l + i - 1) / i + n * __lg(i + 1);
		int y = (l + B - 1) / B + n * __lg(B + 1);
		if (x < y) {
			B = i;
		}
	}
	for (int i = 1; i <= l; i += B) {
		if (use_detector(min(l, i + B - 1)) == (int)ret.size() - 1) {
			continue;
		}
		int cur = max(i, ret.back());
		while (cur <= min(l, i + B - 1)) {
			int L = cur, R = min(l, cur + B - 1), ans = -1;
			while (L <= R) {
				int mid = (L + R) / 2;
				if (mid < 0 || mid > l) exit(0);
				if (use_detector(mid) > (int)ret.size() - 1) {
					R = mid - 1; ans = mid;
				} else {
					L = mid + 1;
				}
			}
			if (ans == -1) {
				break;
			}
			int v = ans - ret.back() - 1;
			ret.push_back(ret.back() + 2 * v);
			cur = ret.back() + 1;
		}
	}
	return ret;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...