#include <bits/stdc++.h>
#include "routers.h"
using namespace std;
map<int, int> mem;
int detect(int x)
{
    if (mem.find(x) != mem.end())
        return mem[x];
    return mem[x] = use_detector(x);
}
bool check(int x, int i)
{
    if (mem.find(x) != mem.end())
        return mem[x] <= i;
    auto it = prev(mem.upper_bound(x));
    return (it->second <= i);
}
vector<int> find_routers(int l, int n, int q) {
    l -= l % 2;
    mem = map<int, int>();
    vector<int> ans(n, 0);
    mem[0] = 0;
    for (int i = 0, x = 0; i < n - 1; i++)
    {
        int prev = x;
        auto it = mem.find(x);
        x = it->first;
        for (int k = 16; k >= 0; k--)
            while (x + (1 << k) <= l && check(x + (1 << k), i) && detect(x + (1 << k)) == i)
                x += (1 << k);
        ans[i + 1] = x + (x - ans[i]);
    }
	return ans;
}
| # | 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... |