제출 #649974

#제출 시각아이디문제언어결과실행 시간메모리
649974ymmBalloons (CEOI11_bal)C++17
90 / 100
389 ms2288 KiB
#include <bits/stdc++.h> #define Loop(x,l,r) for (ll x = (l); x < (ll)(r); ++x) #define LoopR(x,l,r) for (ll x = (r)-1; x >= (ll)(l); --x) typedef long long ll; typedef std::pair<int, int> pii; typedef std::pair<ll , ll > pll; using namespace std; typedef long double ld; typedef pair<ld, ld> pdd; pdd in() { ll x, y; cin >> x >> y; return {x, y}; } const int N = 200'010; const int S = 8192; double a[N], b[N]; ld x[N], r[N]; ld x_off = 0; pdd f[N]; int len = 0; void insert(pdd f) { ::f[len] = f; a[len] = f.first; b[len] = f.second; ++len; } __attribute__((optimize("Ofast,unroll-loops"),target("avx2,fma"))) double get(double x) { #define MIN(x, y) ((x)>(y)?(y):(x)) double ans = 1e30; Loop (i,0,len) { double tmp = a[i]*x + b[i]; ans = MIN(ans, tmp); } return ans; #undef MIN } ld eval(pdd f, ld x) { return f.first * x + f.second; } void trim(ld x) { sort(f, f+len); reverse(f, f+len); int j = 0; Loop (i,0,len) { while (j && eval(f[j-1], x) >= eval(f[i], x)) --j; f[j++] = f[i]; } len = j; Loop (i,0,len) { f[i].second = eval(f[i], x); a[i] = f[i].first; b[i] = f[i].second; } x_off += x; } int main() { cin.tie(0) -> sync_with_stdio(false); cout << fixed << setprecision(3); int n; cin >> n; for (int s = 0; s < n; s += S) { int f = min(s+S, n); Loop (i,s,f) { auto [x, r] = in(); x -= x_off; if (i == s || x > 1e7) { trim(x); x = 0; } r = sqrt(r); r = min(r, (ld)get(x)); cout << r*r << '\n'; insert({0.5/r, -x*0.5/r}); } } }
#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...