제출 #1202581

#제출 시각아이디문제언어결과실행 시간메모리
1202581Ghulam_JunaidFinding Routers (IOI20_routers)C++20
100 / 100
2 ms584 KiB
#include <bits/stdc++.h>
#include "routers.h"
using namespace std;

map<int, int> store;
int get(int x){
    if (store.find(x) != store.end()) return store[x];
    return store[x] = use_detector(x);
}

vector<int> find_routers(int l, int n, int q){
    vector<int> ans(n, 0);

    if (n == 2){
        int lo = 0, hi = l + 1;
        while (hi - lo > 1){
            int mid = lo + (hi - lo) / 2;
            if (get(mid) == 0)
                lo = mid;
            else
                hi = mid;
        }
        ans[1] = 2 * lo;
        return ans;
    }

    for (int i = 1; i < n; i ++){
        int last = ans[i - 1], cur = 64;
        while (last + cur <= l and get(last + cur) == i - 1)
            cur += 64;

        int lo = last + cur - 64, hi = min(l + 1, last + cur);
        while (hi - lo > 1){
            int mid = (lo + hi) / 2;
            if (get(mid) == i - 1)
                lo = mid;
            else
                hi = mid;
        }
        ans[i] = 2 * lo - last;
    }
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...