Submission #869626

#TimeUsernameProblemLanguageResultExecution timeMemory
869626theghostkingBalloons (CEOI11_bal)C++17
10 / 100
239 ms10068 KiB
#include <bits/stdc++.h>
using namespace std;

double ck(double posi, double posj, double ri){
    int on = ((posj-posi)*(posj-posi));
    //cout << posi << " " << posj << " " << ri << "   " << on << " " << (1.0*on)/(4.0*ri) << "\n\n"; 
    return (1.0*on)/(4.0*ri);
}

int main() {
    int n;
    cin >> n;
    pair<double,double> bal[n];
    for (int i = 0; i<n; i++){
        cin >> bal[i].first >> bal[i].second;
    }
    stack<pair<int,double>> s;
    //index, how much it is inflated
    //monotonic stack
    vector<double> ans(n);
    ans[0] = bal[0].second;
    s.push({0,bal[0].second});
    for (int i = 1; i<n; i++){
        ans[i] = bal[i].second;
        if (!s.empty()){
            pair<int,double> a = s.top();
            
            /*while ((!s.empty()) && (ck(a.first,bal[i].first,a.second) >= bal[i].second)){
                s.pop();
                if (!s.empty()){
                    a = s.top();
                }
            }*/
            while (!s.empty()){
                double v = ck(bal[a.first].first, bal[i].first, a.second);
                ans[i] = min(ans[i],v);
                if (v > ans[a.first]){
                    s.pop();
                    if (!s.empty()){
                        a = s.top();
                    }
                }
                else{
                    break;
                }
            }
        }
        if (!s.empty()){
            pair<int,double> a = s.top();
            ans[i] = min(ck(bal[a.first].first,bal[i].first,a.second),bal[i].second);
        }
        s.push({i,ans[i]});
    }
    for (auto x : ans){
        cout << fixed << setprecision(3) << x << '\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...