제출 #339733

#제출 시각아이디문제언어결과실행 시간메모리
339733blue수열 (APIO14_sequence)C++11
0 / 100
51 ms1260 KiB
#include <iostream>
#include <vector>
using namespace std;

long long sq(long long a)
{
    return a*a;
}

int main()
{
    int n, k;
    cin >> n >> k;

    long long a[n+1];
    a[0] = 0;
    for(int i = 1; i <= n; i++)
    {
        cin >> a[i];
        a[i] += a[i-1];
    }

    int right[k+2]; //rightmost element belonging to the i'th part from the left.
    right[0] = 0;
    for(int j = 1; j <= k; j++) right[j] = j;
    right[k+1] = n;

    bool flag = 1;

    while(flag)
    {
        flag = 0;
        for(int j = k; j >= 1; j--)
        {
            while(/*right[j]+1 < right[j+1]
               &&*/ a[ right[j+1] ] - a[ right[j]+1 ] >= a[ right[j] ] - a[ right[j-1] ])
            {
                right[j]++;
                flag = 1;
            }
        }
    }


    long long res = sq(a[n]);
    for(int j = 1; j <= k+1; j++) res -= sq(a[ right[j] ] - a[ right[j-1] ]);
    res /= 2;

    cout << res << '\n';

    for(int i = 1; i <= k; i++) cout << right[i] << ' ';
    cout << '\n';
}
#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...