#include <bits/stdc++.h>
using namespace std;
#define ld long double
#define ll long long
#define eb emplace_back
const int inf = 1e9;
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
auto check = [&](int x1, ld y1, int x2, ld y2) -> bool {
ld dist = sqrtl((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
return dist <= (y1 + y2);
};
ld eps = 1e-9;
int n;
cin >> n;
vector<int> x(n);
vector<ld> rr(n), ans(n);
map<int, ld> active;
for (int i = 0; i < n; ++i) {
cin >> x[i] >> rr[i];
ld mn = rr[i];
auto it = active.lower_bound(x[i]);
while (it != active.begin()) {
auto left = prev(it);
ld l = 0.0, r = rr[i], best = r;
while (r - l > eps) {
ld mid = (l + r) / 2;
if (!check(left->first, left->second, x[i], mid)) {
best = mid;
l = mid;
} else {
r = mid;
}
}
mn = min(mn, best);
if(mn == rr[i]){
break;
}
it--;
}
ans[i] = mn;
active[x[i]] = ans[i];
}
cout << fixed << setprecision(3);
for (int i = 0; i < n; ++i) {
cout << ans[i] << '\n';
}
}
# | 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... |
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |