Submission #952567

#TimeUsernameProblemLanguageResultExecution timeMemory
952567serifefedartarLightning Conductor (POI11_pio)C++17
27 / 100
276 ms13028 KiB
#include <bits/stdc++.h> using namespace std; #define fast ios::sync_with_stdio(0);cin.tie(0); typedef long long ll; #define f first #define s second #define LOGN 20 const ll MOD = 998244353; const ll MAXN = 2e5 + 100; vector<int> h, dp1, dp2; int sq(int x) { int l = 0; int r = 1000; int ans = 1000; while (r >= l) { int mid = l + (r - l) / 2; if (mid * mid >= x) { ans = mid; r = mid - 1; } else l = mid + 1; } return ans; } void dac(vector<int> &dp, int l, int r, int opt_l, int opt_r) { if (l > r) return ; int mx = 0, opt = -1; int mid = l + (r - l) / 2; for (int now = opt_l; now <= min(mid, opt_r); now++) { if (h[now] + sq(mid - now) > mx) { mx = h[now] + sq(mid - now); opt = now; } } dp[mid] = mx; dac(dp, l, mid-1, opt_l, opt); dac(dp, mid+1, r, opt, opt_r); } int main() { fast int n; cin >> n; h = vector<int>(n+1); dp1 = vector<int>(n+2); dp2 = vector<int>(n+2); for (int i = 1; i <= n; i++) cin >> h[i]; dac(dp1, 1, n, 1, n); for (int i = 1; i <= n / 2; i++) swap(h[i], h[n-i+1]); dac(dp2, 1, n, 1, n); for (int i = 1; i <= n; i++) cout << max(0, max(dp1[i], dp2[n - i + 1]) - h[n - i + 1]) << "\n"; }
#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...