이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
constexpr ll pres = 1e2;
constexpr ll inf = (1e18);
constexpr ll epsilon = 1;
ll d;
using pll = pair<ll, ll>;
set<pll> dat;
ll insert(ll x, ll cAns) {
auto it = dat.upper_bound({x,inf});
it--;
auto [l, rl] = *it;
it++;
auto [r, rr] = *it;
ll beg = cAns, end = inf;
while (end > beg) {
ll mid = beg + (end - beg) / 2;
ll diff = mid - cAns;
ll jump = (rl - diff + d) - x;
jump = max(jump, -mid);
ll prev = x + jump;
if ((rr + diff <= prev + d) || jump > mid) {
beg = mid + 1;
} else {
end = mid;
}
}
ll mid = beg;
ll diff = mid - cAns;
ll jump = (rl - diff + d) - x;
jump = max(jump, -mid);
ll prev = x + jump;
dat.insert({x,prev});
return beg;
}
void printAns(ll ans) {
cout << ans / pres;
ans %= pres;
if (ans != 0) cout << ".";
ll mul = pres;
while (ans != 0) {
mul /= 10;
cout << (ans / mul) % 10;
ans %= mul;
}
cout << "\n";
}
int main() {
ll n, m; cin >> n >> m >> d;
dat.insert({-inf,-inf});
dat.insert({inf,inf});
ll ans = 0;
d*=pres;
for (ll i = 0; i < n; ++i) {
ll x; cin >> x;
x *= pres;
ans = insert(x,ans);
}
for (ll i = 0; i < m; ++i) {
ll x; cin >> x;
x *= pres;
ans = insert(x,ans);
printAns(ans);
}
return 0;
}
# | 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... |