제출 #872104

#제출 시각아이디문제언어결과실행 시간메모리
87210412345678Balloons (CEOI11_bal)C++17
0 / 100
2064 ms640 KiB
#include <bits/stdc++.h>

using namespace std;

const int nx=2e3+5;
long long n, x[nx], mx[nx];
double dp[nx];
multiset<pair<double, int>> ms;

int main()
{
    cin.tie(NULL)->sync_with_stdio(false);
    cin>>n;
    for (int i=1; i<=n; i++) cin>>x[i]>>mx[i];
    for (int i=1; i<=n; i++)
    {
        if (ms.empty()) dp[i]=mx[i], ms.insert({DBL_MAX, i});
        else
        {
            auto itr=ms.lower_bound({x[i], 0});
            dp[i]=min(double(mx[i]), ((x[i]-x[itr->second])*(x[i]-x[itr->second]))/(4*dp[itr->second]));
            while (dp[ms.begin()->second]<=dp[i]) ms.erase(ms.begin());
            if (ms.empty()) ms.insert({DBL_MAX, i});
            else
            {
                int l=ms.begin()->second;
                double a=dp[i]-dp[l], b=-2*(dp[l]*x[i]-dp[i]*x[l]), c=dp[l]*x[i]*x[i]-dp[i]*x[l]*x[l];
                double tmp=(-a+sqrt(b*b-4*a*c))/2*a;
                ms.insert({tmp, i});
            }            
        }
    }
    for (int i=1; i<=n; i++) printf("%.3f\n", dp[i]);
}
#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...