Submission #1248894

#TimeUsernameProblemLanguageResultExecution timeMemory
1248894adrilenDistributing Candies (IOI21_candies)C++17
0 / 100
71 ms11956 KiB
#include "candies.h" #include <bits/stdc++.h> using namespace std; using ll = long long; std::vector<int> distribute_candies(std::vector<int> c, std::vector<int>l, std::vector<int> r, std::vector<int> v) { vector<ll> prefix; prefix.push_back(0); int n = v.size(); for (int i = 0; i < n; i++) prefix.push_back(v[i] + prefix.back()); vector<ll>min_prefix(n+1), max_prefix(n+1); min_prefix[n] = max_prefix[n] = prefix.back(); for (int i = n - 1; i >= 0; i--) { min_prefix[i] = min(min_prefix[i+1], prefix[i]); max_prefix[i] = max(max_prefix[i + 1], prefix[i]); } // for (int i : prefix) cout << i << " "; // cout << "\n"; // for (int i : min_prefix) cout << i << " "; // cout << "\n"; // for (int i : max_prefix) cout << i << " "; // cout << "\n"; n = c.size(); vector<int> output(n); for (int i = 0; i < n; i++) { int lower = -1, upper = v.size(), mid; while (lower < upper) { mid = (lower + upper + 1) / 2; if (max_prefix[mid] - min_prefix[mid] >= c[i]) lower = mid; else upper = mid - 1; } if (lower == -1) { output[i] = prefix.back(); continue; } if (max_prefix[lower] == max_prefix[lower + 1]) { output[i] = c[i] - (max_prefix[lower] - prefix.back()); } else { output[i] = prefix.back() - min_prefix[lower]; } } return output; } /* 1 4 -3 6 7 -5 1 5 2 8 15 10 1 2 2 8 10 10 15 15 15 15 15 10 c = 8 -> 3 */
#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...