# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
333286 | blue | Split the sequence (APIO14_sequence) | C++11 | 1109 ms | 1260 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <vector>
using namespace std;
int main()
{
long long n, k;
cin >> n >> k;
long long a[n+1];
a[0] = 0;
for(long long i = 1; i <= n; i++)
{
cin >> a[i];
a[i] += a[i-1];
}
vector<long long> split(k+2); //The i'th split occurs between split[i] and split[i+1]
for(long long i = 0; i <= k; i++) split[i] = i;
split[k+1] = n;
bool flag = 0;
long long x, y, m;
long long segA, segB;
for(int i = 1; i <= ((long long)(1e8))/k; i++)
{
flag = 1;
for(long long i = k; i >= 1; i--)
{
segA = a[split[i]] - a[split[i-1]];
segB = a[split[i+1]] - a[split[i]];
if(segA == segB)
{
continue;
}
if(segA > segB)
{
if(segA - (a[split[i]] - a[split[i]-1]) < segB)
{
continue;
}
}
if(segB > segA)
{
if(segB - (a[split[i]+1] - a[split[i]]) < segA)
{
continue;
}
}
flag = 0;
x = split[i-1] + 1;
y = split[i+1] - 1;
while(y - x > 1)
{
m = (x+y)/2;
segA = a[m] - a[split[i-1]];
segB = a[split[i+1]] - a[m];
if(segA == segB)
{
x = y = m;
}
else if(segA > segB)
{
y = m;
if(segA - (a[m] - a[m-1]) < segB)
x = m;
}
else
{
x = m;
if(segA > segB - (a[m+1] - a[m]))
y = m;
}
}
if(x == y) split[i] = x;
else split[i] = ((a[split[i+1]] - a[y] > a[x] - a[split[i]]) ? y : x);
}
}
long long res = a[n] * a[n];
for(long long i = 1; i <= k+1; i++) res -= (a[split[i]] - a[split[i-1]]) * (a[split[i]] - a[split[i-1]]);
cout << res/2 << '\n';
for(long long i = 1; i <= k; i++) cout << split[i] << ' ';
cout << '\n';
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |