Submission #56958

#TimeUsernameProblemLanguageResultExecution timeMemory
56958AutoratchSplit the sequence (APIO14_sequence)C++14
0 / 100
15 ms920 KiB
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define MOD 1e9 + 7

int n,k,mx;
vector<int> a,ans;
priority_queue<pair<pair<int,int>,pair<int,int> > > q;

pair<int,int> solve(int l,int r)
{
    int sum = a[r]-a[l-1];
    auto it = upper_bound(a.begin()+l,a.begin()+r,sum/2+a[l]);
    auto it2 = it;
    it2--;
    int s1 = (*it-a[l-1])*(a[r]-*it);
    int s2 = (*it2-a[l-1])*(a[r]-*it2);
    if(s1>s2) return {s1,it-a.begin()};
    else return {s2,it2-a.begin()};
}

int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0);

    cin >> n >> k;

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

    q.push({solve(1,n),{1,n}});

    while(k--)
    {
        int x = q.top().first.first,ct = q.top().first.second,l = q.top().second.first,r = q.top().second.second;
        q.pop();
        mx+=x;
        ans.push_back(ct);
        q.push({solve(l,ct),{l,ct}});
        q.push({solve(ct+1,r),{ct+1,r}});
    }

    cout << mx << endl;
    for(int i = 0;i < ans.size();i++) cout << ans[i] << ' ';
}

Compilation message (stderr)

sequence.cpp: In function 'int main()':
sequence.cpp:44:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0;i < ans.size();i++) 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...