Submission #134931

#TimeUsernameProblemLanguageResultExecution timeMemory
134931qrnoSplit the sequence (APIO14_sequence)C++14
0 / 100
28 ms888 KiB
#include <iostream> #include <vector> #include <set> #include <queue> using namespace std; vector<int> numbers; priority_queue<pair<int, pair<int, int> > > pieces; set<int> splits; int findSplit(int l, int r) { int totalSum = 0; for (int i = l; i < r; i++) { totalSum += numbers[i]; } int lSum = 0; int rSum = totalSum; int ans = 0; int i; for (i = l; i < r; i++) { lSum += numbers[i]; rSum -= numbers[i]; if (lSum * rSum > ans) ans = lSum * rSum; if (lSum * rSum < ans) { lSum -= numbers[i]; rSum += numbers[i]; pieces.push(make_pair(lSum, make_pair(l, i))); pieces.push(make_pair(rSum, make_pair(i, r))); splits.insert(i); return ans; } } splits.insert(i); pieces.push(make_pair(lSum, make_pair(l, i))); pieces.push(make_pair(rSum, make_pair(i, r))); return ans; } int main() { int nAmount, sAmount; cin >> nAmount >> sAmount; int totalSum = 0; for (int i = 0; i < nAmount; i++) { int x; cin >> x; numbers.push_back(x); totalSum += x; } pieces.push(make_pair(totalSum, make_pair(0, nAmount))); int ans = 0; for (int i = 0; i < sAmount;) { pair<int, pair<int, int> > topPiece = pieces.top(); pieces.pop(); int l = topPiece.second.first; int r = topPiece.second.second; if (l != r+1) { int x = findSplit(topPiece.second.first, topPiece.second.second); ans += x; i++; } } cout << ans << endl; for (int num : splits) cout << num << " "; cout << endl; 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...