제출 #1301191

#제출 시각아이디문제언어결과실행 시간메모리
1301191i_elhdadFeast (NOI19_feast)C++20
18 / 100
66 ms2632 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const ll NEG = (ll)-9e18; struct Node { ll val; // value = sum - lambda * segments int cnt; // number of segments used Node(ll v = NEG, int c = 0) : val(v), cnt(c) {} }; inline Node better(const Node &a, const Node &b){ if (a.val != b.val) return (a.val > b.val) ? a : b; // tie-break: prefer fewer segments return (a.cnt < b.cnt) ? a : b; } pair<ll,int> solve_with_lambda(const vector<ll> &A, ll lambda){ int n = (int)A.size(); Node dp(0,0); // best for prefix processed so far Node best_end(NEG,0); // best value for a solution that ends at current i for (int i = 0; i < n; ++i){ // option 1: extend previous ending segment Node extend = Node(best_end.val + A[i], best_end.cnt); // option 2: start new segment at i (pay -lambda) Node start_new = Node(dp.val + A[i] - lambda, dp.cnt + 1); best_end = better(extend, start_new); dp = better(dp, best_end); } return {dp.val, dp.cnt}; } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int N, K; if (!(cin >> N >> K)) return 0; vector<ll> A(N); for (int i = 0; i < N; ++i) cin >> A[i]; // Binary search lambda: find largest lambda such that cnt >= K ll lo = - (ll)1e15, hi = (ll)1e15; while (lo < hi) { ll mid = lo + ((hi - lo + 1) >> 1); auto [val, cnt] = solve_with_lambda(A, mid); if (cnt >= K) lo = mid; else hi = mid - 1; } ll lambda = lo; auto [val, cnt] = solve_with_lambda(A, lambda); // answer for at most K segments: ll answer = val + lambda * (ll)K; cout << answer << '\n'; return 0; }
#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...