Submission #1062668

#TimeUsernameProblemLanguageResultExecution timeMemory
1062668j_vdd16Distributing Candies (IOI21_candies)C++17
0 / 100
78 ms15080 KiB
#include "candies.h" #include <algorithm> #include <bitset> #include <cstdint> #include <cstring> #include <iostream> #include <limits.h> #include <math.h> #include <map> #include <numeric> #include <queue> #include <set> #include <stack> #include <string> #include <vector> #define ll long long #define loop(X, N) for(int X = 0; X < (N); X++) #define all(V) V.begin(), V.end() #define rall(V) V.rbegin(), V.rend() using namespace std; typedef vector<int> vi; typedef vector<vi> vvi; typedef pair<int, int> ii; typedef vector<ii> vii; typedef vector<vector<ii>> vvii; typedef vector<bool> vb; typedef vector<vector<bool>> vvb; // struct SegTree { // int n, N; // vector<set<int>> tree; // SegTree(int _n) { // int n = _n; // int N = 1; // while (N < n) N *= 2; // tree.resize(2 * N); // } // }; vi distribute_candies(vi c, vi ls, vi rs, vi vs) { int n = c.size(); int q = ls.size(); vector<ll> cumul(q + 1, 0); vector<pair<ll, int>> sufMax(q + 1), sufMin(q + 1); for (int i = 0; i < q; i++) { ll v = vs[i]; cumul[i + 1] = cumul[i] + v; cumul[i + 1] = max((ll)0, cumul[i + 1]); } sufMax.back() = {cumul[q], q}; sufMin.back() = {cumul[q], q}; for (int i = q - 1; i >= 0; i--) { sufMin[i] = sufMin[i + 1]; sufMax[i] = sufMax[i + 1]; if (cumul[i] < sufMin[i + 1].first) { sufMin[i].first = cumul[i]; sufMin[i].second = i; } if (cumul[i] > sufMax[i + 1].first) { sufMax[i].first = cumul[i]; sufMax[i].second = i; } } vi s(n); loop(i, n) { int l = 0, r = q; while (l < r) { int m = (l + r + 1) / 2; ll diff = sufMax[m].first - sufMin[m].first; if (diff < c[i]) { r = m - 1; } else { l = m; } } // if (sufMax[l].first - sufMin[l].first <= c[i] && l == 0) { // s[i] = cumul.back(); // continue; // } int lastMin = sufMin[l].second; int lastMax = sufMax[l].second; if (lastMin >= lastMax) { l = lastMin; s[i] = 0; } else { l = lastMax; s[i] = c[i]; } s[i] += cumul.back() - cumul[l]; } return s; }
#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...