#include <bits/stdc++.h>
#define ll long long
using namespace std;
// Struct lưu thông tin quả bóng đã bơm (Vị trí X, Bán kính R)
struct Balloon {
ll X;
double R;
};
// Hàm tính R_i^max khi tiếp xúc với bóng 'prev' (j)
double cal(double R_j, ll X_j, ll X_i) {
if (R_j < 1e-9) return 1e18; // Rất lớn nếu R_j = 0
double delta_X = (double)(X_i - X_j);
return (delta_X * delta_X) / (4.0 * R_j);
}
void sol() {
ll n;
cin >> n;
vector<pair<ll, double>> v(n + 1); // v[i] = {X_i, M_i}
for (ll i = 1; i <= n; i++) {
cin >> v[i].first >> v[i].second;
}
vector<double> ans(n + 1);
// Stack lưu các quả bóng đã bơm tạo thành bao lồi dưới
stack<Balloon> mono_stack;
for (ll i = 1; i <= n; i++) {
ll X_i = v[i].first;
double M_i = v[i].second;
double R_i = M_i;
// BƯỚC 1 & 2: Tính R_i và Duy trì Stack
while (!mono_stack.empty()) {
Balloon t = mono_stack.top();
// Tính bán kính tối đa R_i khi tiếp xúc với bóng t (j)
double r_max_t = cal(t.R, t.X, X_i);
// Cập nhật R_i: R_i = min(R_i, r_max_t)
R_i = min(R_i, r_max_t);
// Nếu r_max_t <= R_i (tức là bóng t GIỚI HẠN R_i)
if (abs(R_i - r_max_t) < 1e-9 || R_i < r_max_t) {
// T đã giới hạn R_i, nên không cần kiểm tra bóng dưới T
break;
}
// Nếu R_i đã được giới hạn bởi M_i hoặc bóng khác (R_i < r_max_t)
// và r_max_t > R_i: nghĩa là bóng t không phải là giới hạn gần nhất,
// ta loại bỏ t để kiểm tra bóng tiếp theo.
else {
mono_stack.pop();
}
}
// BƯỚC 3: Thêm bóng i vào Stack
// Chỉ cần thêm nếu R_i > 0 để tránh R_j = 0
if (R_i > 1e-9) {
mono_stack.push({X_i, R_i});
}
ans[i] = R_i;
}
// Ghi kết quả
for (ll i = 1; i <= n; i++) {
cout << fixed << setprecision(3) << ans[i] << '\n';
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
// freopen("BALLOONS.INP","r",stdin);
// freopen("BALLOONS.OUT","w",stdout);
sol();
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... |
| # | 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... |