#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define endl '\n'
typedef unsigned int uint;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
using namespace std;
const ld Eps = 1e-5;
ld dist(ld x1, ld y1, ld x2, ld y2)
{
return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
void solve()
{
ll n;
cin >> n;
vector<ll> x(n + 1);
vector<ll> r(n + 1);
ll last = -1;
vector<ld> ans(n + 1);
set<pair<ld, ll>> s;
for (int i = 1; i <= n; i++)
{
cin >> x[i] >> r[i];
while (!s.empty() && s.begin()->first < x[i])
{
s.erase(s.begin());
}
if (s.empty())
{
ans[i] = r[i];
s.insert({(ld)x[i] + 2.5*r[i] , i});
continue;
}
ll j = s.begin()->second;
ld L = 0, R = r[i];
while (L + Eps < R)
{
ld mid = (L + R) / 2.0;
bool ok = 1;
if (dist(x[j], ans[j], x[i], mid) + Eps > ans[j] + mid)
{
// L = mid;
}
else
{
ok = 0;
}
if (ok)
{
L = mid;
}
else
{
R = mid;
}
}
ans[i] = L;
}
cout << fixed << setprecision(10);
for (int i = 1; i <= n; i++)
{
cout << ans[i] << endl;
}
}
signed main()
{
ios_base::sync_with_stdio(NULL);
cin.tie(NULL);
cout.tie(NULL);
ll t = 1;
// cin >> t;
while (t--)
{
solve();
}
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... |