Submission #1166407

#TimeUsernameProblemLanguageResultExecution timeMemory
1166407badge881Snowball (JOI21_ho_t2)C++20
100 / 100
108 ms14408 KiB
#include <bits/stdc++.h> #define int long long using namespace std; const int numMax = 200005; signed main() { int nbBoules, nbWinds; scanf("%lld%lld", &nbBoules, &nbWinds); vector<int> coord(numMax + 1), winds(numMax + 1), tabCumul(numMax + 1), precalcul1(numMax + 1, 0), precalcul2(numMax + 1, 0), answer(numMax + 1); vector<pair<int, int>> b(nbBoules + 1); for (int i = 0; i < nbBoules; i++) scanf("%lld", &coord[i + 1]); for (int i = 0; i < nbWinds; i++) scanf("%lld", &winds[i + 1]); tabCumul[0] = 0; precalcul1[0] = precalcul2[0] = 0; for (int j = 0; j < nbWinds; j++) { tabCumul[j + 1] = tabCumul[j] + winds[j + 1]; precalcul1[j + 1] = max(precalcul1[j], tabCumul[j + 1]); precalcul2[j + 1] = max(precalcul2[j], -tabCumul[j + 1]); } answer[1] = precalcul2[nbWinds]; answer[nbBoules] = precalcul1[nbWinds]; auto check = [&precalcul1, &precalcul2](int k, int tmp) -> bool { return ((precalcul1[k] + precalcul2[k]) <= tmp); }; for (int i = 1; i < nbBoules; i++) { int tmp = coord[i + 1] - coord[i]; int left = 1, right = nbWinds, res = 0; while (left <= right) { int mid = (left + right) / 2; if (check(mid, tmp)) res = mid, left = mid + 1; else right = mid - 1; } if (res > 0) b[i].first = precalcul1[res], b[i].second = precalcul2[res]; if (res < nbWinds) { int pre_l = b[i].first, pre_r = b[i].second; int cur = tmp - pre_l - pre_r; if (tabCumul[res + 1] > 0) b[i].first += cur; else b[i].second += cur; } } for (int i = 1; i <= nbBoules; i++) { if (i < nbBoules) answer[i] += b[i].first, answer[i + 1] += b[i].second; printf("%lld\n", answer[i]); } return 0; }

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:10:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   10 |     scanf("%lld%lld", &nbBoules, &nbWinds);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:21:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   21 |         scanf("%lld", &coord[i + 1]);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:23:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   23 |         scanf("%lld", &winds[i + 1]);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...