Submission #470608

#TimeUsernameProblemLanguageResultExecution timeMemory
470608ymm수열 (APIO14_sequence)C++17
0 / 100
2052 ms1100 KiB
///
///   ♪ Pizza mozzarella rella rella rella... ♪
///

#define _USE_MATH_DEFINES
#define FAST ios::sync_with_stdio(false),cin.tie(0);
#include <bits/stdc++.h>
#define Loop(x, l, r) for(int x = (l); x < (r); ++x)
#define LoopR(x, l, r) for(int x = (r)-1; x >= (l); --x)
#define all(x) x.begin(), x.end()
#define Kill(x) exit((cout << (x) << '\n', 0))
#define YN(flag) ((flag)? "YES": "NO")
#define F first
#define S second
typedef          long long   ll;
typedef unsigned long long  ull;
typedef std::pair<int,int>  pii;
typedef std::pair<ll ,ll >  pll;
using namespace std;

const int N = 100'010;
const int K = 210;
ll sum[K], pro[N];
ll a[N];
int ans[K];
int n, k;

void add(int i, ll x){pro[i] += x*sum[i]; sum[i] += x;}
void rem(int i, ll x){sum[i] -= x; pro[i] -= x*sum[i];}

void frw(int i)
{
    if(i == k) return;
    for(;;)
    {
        frw(i+1);
        if(ans[i] == ans[i+1]-1) return;
        ll x1 = pro[i-1] + pro[i];
        rem(i, a[ans[i]]);
        add(i-1, a[ans[i]]);
        ++ans[i];
        ll x2 = pro[i-1] + pro[i];
        if(x1 < x2)
        {
            --ans[i];
            rem(i-1, a[ans[i]]);
            add(i, a[ans[i]]);
            return;
        }
    }
}

int main()
{
    FAST;
    cin >> n >> k; ++k;
    Loop(i,0,n) cin >> a[i];

    ans[k] = n;
    Loop(i,0,k) ans[i] = i, sum[i] = a[i];
    Loop(i,k,n) add(k-1, a[i]);

    frw(1);

    ll sum = 0, sum2 = 0;
    Loop(i,0,n) sum += a[i], sum2 += a[i]*a[i];
    ll fans = (sum*sum-sum2)/2;
    Loop(i,0,k) fans -= pro[i];
    cout << fans << '\n';
    Loop(i,1,k) cout << ans[i] << ' ';
}
#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...