Submission #1266636

#TimeUsernameProblemLanguageResultExecution timeMemory
1266636ngunguoi45Balloons (CEOI11_bal)C++20
100 / 100
107 ms6488 KiB
#include <bits/stdc++.h>

using namespace std;

const int maxn = 2e5+5;

int n;
double x[maxn], r[maxn];

double dist (int i, int j, double p) {
    return 1.0  * (x[i]-x[j]) * (x[i]-x[j]) / (4.0*p);
}

void read_and_prep() {
    cin >> n;
    for (int i = 1;i <= n; i++) {
        cin >> x[i] >> r[i];
    }
}

namespace sub1 {
    // init
    double ans[maxn];
    // func
    bool check () {
        return (n <= 2000);
    }
    void solve () {
        ans[1] = r[1];
        for (int i = 2;i <= n; i++) {
            double radius = r[i];
            for (int j = 1;j < i; j++) {
                radius = min (radius, dist(j, i, ans[j]));
            }
            ans[i] = radius;
        }
        for (int i = 1;i <= n; i++) cout << fixed << setprecision(3) << ans[i] << "\n";
        cout << "\n";
    }
}

namespace sub2 {
    // init
    double ans[maxn];
    stack<int> st;
    // func
    void solve () {
        st.push(1);
        ans[1] = r[1];
        for (int i = 2;i <= n; i++) {
            double radius = r[i];
            while ((int)st.size()) {
                int j = (int)st.top();
                radius = min (radius, dist(j,i,ans[j]));
                if (radius >= ans[j]) st.pop();
                else break;
            }
            ans[i] = radius;
            st.push(i);
        }
        for  (int i = 1;i <= n; i++) cout << fixed << setprecision(3) << ans[i] << "\n";
        cout << "\n";
    }
}

int main () {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    read_and_prep();

    if (sub1::check()) sub1::solve();
    else sub2::solve();
    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...