Submission #631117

#TimeUsernameProblemLanguageResultExecution timeMemory
631117a_aguiloBalloons (CEOI11_bal)C++14
0 / 100
557 ms14388 KiB
#include<bits/stdc++.h>

using namespace std;

typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<int, int> pii;
typedef vector<pii> vpii;

int n;

long double radius(int d, int r){
    return (long double)(d*d)/(4*r);
}

int main(){
    cin >> n;
    vector<pair<int, long double>> MyStack;
    //Mystack[i] = {position, radius}
    vector<long double> answers(n);
    vi position(n);
    vi limit(n);
    for(int i = 0; i < n; ++i) cin >> position[i] >> limit[i];

    answers[0] = limit[0];
    MyStack.push_back({position[0], (long double)limit[0]});
    for(int i = 1; i < n; ++i){
        int it = MyStack.size()-2;
        while(it >= 0 and (radius(position[i]-MyStack[it].first, MyStack[it].second) < radius(position[i]-MyStack[it+1].first, MyStack[it+1].second)) and ((long double)limit[i] > radius(position[i]-MyStack[it+1].first, MyStack[it+1].second) ) ){
            MyStack.pop_back();
            it--;
        }
        long double rad = min((long double)limit[i], radius(position[i]-MyStack[MyStack.size()-1].first, MyStack[MyStack.size()-1].second) );
        MyStack.push_back({position[i], rad});
        answers[i] = rad;
    }
    cout << fixed << setprecision(3);
    for (long double ans: answers) cout << ans << endl;

    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...