Submission #1147593

#TimeUsernameProblemLanguageResultExecution timeMemory
1147593jeremiasFeast (NOI19_feast)C++20
0 / 100
33 ms2492 KiB
#include <bits/stdc++.h> #define forn(i, n) for (tint i = 0; i < tint(n); i++) #define forsn(i, s, n) for (tint i = s; i < tint(n); i++) #define dforn(i, n) for (tint i = tint(n) - 1; i >= 0; i--) #define dforsn(i, s, n) for (tint i = tint(n) - 1; i >= s; i--) #define sz(x) tint(x.size()) #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define DBG(x) cerr << #x << " = " << x << endl using namespace std; using tint = long long; using vi = vector<tint>; using pii = pair<tint, tint>; inline void fastIO() { ios_base::sync_with_stdio(false); cin.tie(NULL); } inline string YN(bool x, string y = "YES", string n = "NO") { return (x ? y : n); } template <typename T> inline void chmax(T &lhs, T rhs) { lhs = max(lhs, rhs); } template <typename T> inline void chmin(T &lhs, T rhs) { lhs = min(lhs, rhs); } template <typename T, typename U> ostream &operator<<(ostream &os, const pair<T, U> &p) { os << "(" << p.first << ", " << p.second << ")"; return os; } template <typename T> ostream &operator<<(ostream &os, const vector<T> &v) { os << "["; forn(i, sz(v)) { if (i > 0) os << ", "; os << v[i]; } os << "]"; return os; } template <typename T, size_t N> ostream &operator<<(ostream &os, const array<T, N> &v) { os << "["; forn(i, N) { if (i > 0) os << ", "; os << v[i]; } os << "]"; return os; } int main() { fastIO(); tint n, k; cin >> n >> k; vi arr; tint curr = 0, prevSign = -1, start = 0, pos = 0; forn(i, n) { tint el; cin >> el; bool sign = (el >= 0); if (prevSign != -1 && prevSign != sign) { arr.push_back(curr); pos += (curr > 0); start += curr * (curr > 0); curr = 0; } curr += el; prevSign = sign; } pos += (curr > 0); start += curr * (curr > 0); arr.push_back(curr); arr.push_back(0); n = sz(arr); auto f = [&](tint lam) { tint ret = start - lam * pos, left = 0; forn(i, n - 1) { if (arr[i] <= 0) continue; ret += max(0LL, lam - min(arr[i], -arr[i + 1])); } return -(ret + lam * k); }; tint l = 0, r = 1e9; while (r - l > 2) { tint m1 = l + (r - l) / 3; tint m2 = r - (r - l) / 3; tint f1 = f(m1); tint f2 = f(m2); if (f1 < f2) l = m1; else r = m2; } tint ans = -1e9; forsn(i, l, r + 1) chmax(ans, f(i)); cout << -ans << "\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...