제출 #1201605

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

const int NM = 1e5 + 5;

vector<int> res, ans;
int GET[NM];
set<int> s;

int get(int x)
{
    if (GET[x] != -1)
        return GET[x];
    s.insert(x);
    return GET[x] = use_detector(x);
}

int cnt = 0;

void calc(int L, int R, int x)
{
    if (!cnt)
        return;
    while (s.size() && ans[get(*s.begin())] != -1)
        s.erase(s.begin());
    int l = L + 1, r = (s.empty() ? R : *s.begin());
    while (l < r - 1)
    {
        int m = l + r >> 1;
        (get(m) == x ? l : r) = m;
    }
    int nx = L + 2 * (r - L - (get(r) > x));
    ans[get(r)] = nx;
    cnt--;
    calc(nx, R, get(r));
}

vector<int> find_routers(int l, int n, int q)
{
    ans.resize(n, -1);
    ans[0] = 0;
    memset(GET, -1, sizeof GET);
    cnt = n - 1;
    calc(0, l, 0);
    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...