제출 #1324505

#제출 시각아이디문제언어결과실행 시간메모리
1324505jack205Mobile (BOI12_mobile)C++20
95 / 100
1031 ms35572 KiB
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 1000000;
long long n, l;
pair<double,double> a[MAXN+5];
pair<double,double> seg[MAXN+5];
const double eps = 1e-12;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> n >> l;
    for(int i=1;i<=n;i++) cin >> a[i].first >> a[i].second;

    double st=0, ed=1e12+5, ans=-1;

    vector<int> sta;
    sta.reserve(n);

    for(int it=0; it<80; it++){
        sta.clear();
        double mid=(st+ed)/2;
        double r2 = mid*mid;

        for(int i=1;i<=n;i++){
            double x=a[i].first, y=a[i].second;
            if(r2 < y*y) { seg[i].first = 1e18; continue; }
            double dx = sqrt(max(0.0, r2 - y*y));
            seg[i].first = x - dx;
            seg[i].second = x + dx;
        }

        for(int i=1;i<=n;i++){
            if(seg[i].first >= 1e17) continue; // sentinel
            while(!sta.empty() && seg[sta.back()].first >= seg[i].first - eps)
                sta.pop_back();
            sta.push_back(i);
        }

        double cur=0;
        for(int idx: sta){
            if(seg[idx].first > cur + eps){ cur=-1; break; }
            cur = max(cur, seg[idx].second);
            if(cur >= l - eps) break;
        }

        if(cur >= l){
            ans = mid;
            ed = mid;
        }else st = mid;
    }

    cout << fixed << setprecision(6) << ans << "\n";
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...