Submission #167470

#TimeUsernameProblemLanguageResultExecution timeMemory
167470ThuleanxLightning Conductor (POI11_pio)C++14
91 / 100
150 ms25180 KiB
#include <bits/stdc++.h> using namespace std; const int N = 5e5+7; int n; int h[N]; int L[N], R[N]; double sqr[N]; struct Sol { int i, high; Sol(int i, int high):i(i), high(high) {} int value(int j) { return high + ceil(sqr[j-i]); } double actual_value(int j) { return high + sqr[j-i]; } int to(Sol &other) { int lo = other.i, hi = n-1; while (lo <= hi) { int mid = lo+hi>>1; if (actual_value(mid) > other.actual_value(mid)) lo = mid+1; else hi = mid-1; } return lo; } }; void solve(int A[]) { deque<Sol> dq; int hi = -1; for (int i = 0; i < n; i++) { while (dq.size() >= 2 && dq[0].value(i) < dq[1].value(i)) dq.pop_front(); if (dq.size()) A[i] = dq.front().value(i); if (hi < h[i]) { Sol sol(i, h[i]); while (dq.size() && dq.back().to(sol) <= i) dq.pop_back(); while (dq.size() >= 2 && dq[dq.size()-2].to(dq.back()) >= dq.back().to(sol)) dq.pop_back(); dq.push_back(sol); } hi = max(hi, h[i]); } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin>>n; memset(sqr,0,sizeof(sqr)); for (int i = 0; i < N; i++) sqr[i] = sqrt(i); for (int i = 0; i < n; i++) cin>>h[i]; solve(L); reverse(h, h+n); solve(R); reverse(h, h+n); reverse(R, R+n); stringstream ss; for (int i = 0; i < n; i++) ss << max(0, max(L[i],R[i])-h[i]) << endl; cout << ss.str(); return 0; }

Compilation message (stderr)

pio.cpp: In member function 'int Sol::to(Sol&)':
pio.cpp:18:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
    int mid = lo+hi>>1; 
              ~~^~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...