Submission #1277412

#TimeUsernameProblemLanguageResultExecution timeMemory
1277412Bui_Quoc_CuongSnowball (JOI21_ho_t2)C++20
33 / 100
95 ms8224 KiB
#include <bits/stdc++.h> using namespace std; #define all(ko) ko.begin(), ko.end() #define FOR(i, a, b) for (int i = a; i <= (int)b; i++) #define FORD(i, a, b) for (int i = a; i >= (int)b; i--) #define ll long long const int MAX = 2e5 + 5; int n, q; ll a[MAX]; namespace sub1 { ll curL[MAX], curR[MAX], ans[MAX], curP[MAX]; void solve () { FOR(i, 1, n) curL[i] = curR[i] = curP[i] = a[i]; while (q--) { ll w; cin >> w; if (w < 0) { FORD(i, n, 1) { if (i != 1) { ll newP = curP[i] + w; if (newP < curL[i]) { ll newcurL = max(curR[i - 1], newP); ans[i]+= max(1LL * 0, curL[i] - newcurL); curL[i] = min(curL[i], newcurL); } curP[i] = newP; } else { ll newP = curP[i] + w; if (newP < curL[i]) { ans[i]+= curL[i] - newP; curL[i] = newP; } curP[i] = newP; } } } else { FOR(i, 1, n) { if (i != n) { ll newP = curP[i] + w; if (newP > curR[i]) { ll newcurR = min(curL[i + 1], newP); ans[i]+= max(1LL * 0, newcurR - curR[i]); curR[i] = max(curR[i], newcurR); } curP[i] = newP; } else { ll newP = curP[i] + w; if (newP > curR[i]) { ans[i]+= newP - curR[i]; curR[i] = newP; } curP[i] = newP; } } } } FOR(i, 1, n) { cout << ans[i] << "\n"; } } } namespace sub2 { ll min_delta[MAX], max_delta[MAX], sum_delta[MAX]; void solve () { a[0] = - 1e14; a[n + 1] = 1e14; FOR(i, 1, q) { ll w; cin >> w; sum_delta[i] = sum_delta[i - 1] + w; min_delta[i] = min(min_delta[i - 1], sum_delta[i]); max_delta[i] = max(max_delta[i - 1], sum_delta[i]); } FOR(i, 1, n) { ll ansL = 0; { int l = 0, r = q, resL = 0; while (l <= r) { int mid = (l + r) >> 1; if (a[i] - a[i - 1] > max_delta[mid] - min_delta[mid]) resL = mid, l = mid + 1; else r = mid - 1; } if (sum_delta[resL + 1] < 0) ansL = a[i] - a[i - 1] - max_delta[resL]; else ansL = min_delta[resL] * - 1; } ll ansR = 0; { int l = 0, r = q, resR = 0; while (l <= r) { int mid = (l + r) >> 1; if (a[i + 1] - a[i] > max_delta[mid] - min_delta[mid]) resR = mid, l = mid + 1; else r = mid - 1; } if (sum_delta[resR + 1] > 0) ansR = a[i + 1] - a[i] + min_delta[resR]; else ansR = max_delta[resR]; } cout << ansL + ansR << "\n"; } } } void Solve() { cin >> n >> q; FOR(i, 1, n) cin >> a[i]; // return sub1 :: solve(); return sub2 :: solve(); } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); #define kieuoanh "kieuoanh" if (fopen(kieuoanh".inp", "r")) { freopen(kieuoanh".inp", "r", stdin); freopen(kieuoanh".out", "w", stdout); } int TEST = 1; // cin >> TEST; while (TEST--) Solve(); cerr << "\nTime elapsed: " << 0.001 * clock() << "s\n"; return 0; }

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:120:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  120 |         freopen(kieuoanh".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:121:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  121 |         freopen(kieuoanh".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...