#include<bits/stdc++.h>
#if defined(LOCAL) && __has_include("debug.h")
#include "debug.h"
#else
#define debug(...)
#endif
using i64 = long long;
using u64 = unsigned long long;
using i128 = __int128;
using ld = long double;
struct Line {
i64 m, b;
ld X;
ld eval(ld x) const { return (ld)m * x + (ld)b; }
};
struct MonoCHT {
std::deque<Line> dq;
MonoCHT() {}
static bool bad(const Line &L1, const Line &L2, const Line &L3) {
i128 left = (i128)(L2.b - L1.b) * (i128)(L2.m - L3.m);
i128 right = (i128)(L3.b - L2.b) * (i128)(L1.m - L2.m);
return left >= right;
}
static ld isectX(const Line& A, const Line& B) {
return (ld)(B.b - A.b) / (ld)(A.m - B.m);
}
void add(Line L) {
if(!dq.empty() && dq.back().m == L.m) {
if(dq.back().b >= L.b) return;
dq.pop_back();
}
while(dq.size() >= 2 && bad(dq[dq.size() - 2], dq[dq.size() - 1], L)) dq.pop_back();
L.X = dq.empty() ? (ld)-1e300L : isectX(dq.back(), L);
while(!dq.empty() && L.X <= dq.back().X) {
dq.pop_back();
while(dq.size() >= 2 && bad(dq[dq.size() - 2], dq[dq.size() - 1], L)) dq.pop_back();
L.X = dq.empty() ? (ld)-1e300L : isectX(dq.back(), L);
}
dq.push_back(L);
}
};
void solve() {
// (x - xi)^2 + yi^2
// x^2 + min((- 2xix + xi^2 + yi^2))
int n, L;
std::cin >> n >> L;
MonoCHT cht;
for(int i = 0; i < n; i++) {
i64 x, y;
std::cin >> x >> y;
cht.add(Line(2 * x, -x * x - y * y, -1e300L));
}
const auto& q = cht.dq;
ld res = 0;
for(int i = 0; i < int(q.size()); i++) {
auto f = [&](ld x) -> ld {
return x * x - q[i].eval(x);
};
ld segL = std::max((ld)0.0L, q[i].X);
ld segR = (i + 1 < (int)q.size()) ? q[i + 1].X : (ld)1e300L;
segL = std::fmax(segL, (ld)0.0L);
segR = std::fmin(segR, L);
if(segL > segR) continue;
res = std::max(res, f(segL));
res = std::max(res, f(segR));
}
std::cout << std::fixed << std::setprecision(6) << sqrtl(res) << '\n';
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int t = 1;
//std::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... |
| # | 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... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |