Submission #1299993

#TimeUsernameProblemLanguageResultExecution timeMemory
1299993khoavn2008Feast (NOI19_feast)C++17
18 / 100
1095 ms2632 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; struct Seg { ll sum; int l, r; }; // Tìm đoạn con có tổng lớn nhất (Kadane) và trả về sum + vị trí Seg best_segment(const vector<ll>& a) { ll best = LLONG_MIN, cur = 0; int start = 1, bestL = 1, bestR = 1; for (int i = 1; i < (int)a.size(); i++) { if (cur + a[i] < a[i]) { cur = a[i]; start = i; } else { cur += a[i]; } if (cur > best) { best = cur; bestL = start; bestR = i; } } return {best, bestL, bestR}; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N, K; cin >> N >> K; vector<ll> a(N + 1); for (int i = 1; i <= N; i++) cin >> a[i]; ll total_ans = 0; for (int k = 0; k < K; k++) { Seg seg = best_segment(a); if (seg.sum < 0) break; // không lấy đoạn âm total_ans += seg.sum; // XÓA đoạn này for (int i = seg.l; i <= seg.r; i++) { a[i] = 0; // hoặc a[i] = -1e18; } } cout << total_ans << "\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...