제출 #134917

#제출 시각아이디문제언어결과실행 시간메모리
134917qrno수열 (APIO14_sequence)C++14
0 / 100
28 ms1168 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) { 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); 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; i++) { pair<int, pair<int, int> > topPiece = pieces.top(); pieces.pop(); ans += findSplit(topPiece.second.first, topPiece.second.second); } 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...