이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "routers.h"
using namespace std;
using ll = long long;
using pii = pair<int, int>;
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
const int INF = 2e9, N = 1e5+15, M = 998244353, LOG = 16;
const ll LINF = 1e18;
vector<int> bit;
void upd(int i, int x) {
for(; i < N; i+=(i & -i)) bit[i] = min(bit[i], x);
}
int mn(int i) {
int ret = N;
for(; i; i-=(i & -i)) ret = min(bit[i], ret);
return ret;
}
vector<int> find_routers(int l, int n, int q) {
vector<int> asked(l, -1);
bit.assign(n+123, l-1);
vector<int> ans {0};
auto Ask = [&] (int x) {
return asked[x] = (asked[x] >= 0 ? asked[x] : use_detector(x));
};
for(int i = 1; i < n; i++)
{
int s = ans.back()+1, e = mn(n-i);
//cout << i << ": "<< s << ", " << e << '\n';
while(s < e) {
int m = (s + e + 1) / 2;
int cur = Ask(m);
if(cur > i-1) {
e = m-1;
upd(n-cur, m);
//cout << n-cur << " updated with " << m << '\n';
}
else s = m;
q--;
}
ans.push_back(ans.back() + 2 * (s - ans.back()));
}
assert(q >= 0);
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... |