# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1255429 | robijoy | Finding Routers (IOI20_routers) | C++17 | 0 ms | 0 KiB |
/*
* Starting with the name of almighty ALLAH
*/
#include "routers.h"
// #include <bits/stdc++.h>
using namespace std;
// #define int long long
// vector<int> p = {0,6,8};
const int N = 1e5+5;
int dp[N];
// int use_detector(int x)
// {
// vector<int>::iterator left, right;
// right = upper_bound(p.begin(), p.end(), x);
// left = prev(right);
// if (right == p.end()) {
// return p.size() - 1;
// } else if ((x - *left) <= (*right - x)){
// return std::distance(p.begin(), left);
// } else {
// return std::distance(p.begin(), right);
// }
// }
vector<int> find_routers(int size, int n, int q) {
memset(dp,-1,sizeof(dp));
vector<int> ans;
ans.push_back(0);
int last = 0;
for (int i = 0; i < n-1; ++i)
{
int l = ans[ans.size()-1]+1, r = size;
int an = 0;
while(l<=r) {
int mid = (l+r)>>1;
int x = 0;
if(dp[mid]!=-1) {
x = dp[mid];
}else {
x = use_detector(mid);
dp[mid] = x;
}
if(x == last) {
l = mid+1;
}else{
an = mid;
r = mid-1;
}
}
int lasti = ans[ans.size()-1];
int dis = an - lasti;
dis--;
ans.push_back(lasti+(dis*2));
last++;
}
return ans;
}
// int32_t main() {
// ios::sync_with_stdio(false);
// cin.tie(0);
// int l, n, q;
// cin>>l>>n>>q;
// vector<int> robi = find_routers(l,n,q);
// for (int i = 0; i < robi.size(); ++i)
// {
// cout<<robi[i]<<' ';
// }
// }