Submission #1223219

#TimeUsernameProblemLanguageResultExecution timeMemory
1223219Szymon_Pilipczuk수열 (APIO14_sequence)C++20
33 / 100
6 ms3144 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned long long ull; #define int long long #define st first #define nd second #define pb push_back #define all(a) a.begin(),a.end() #define rep(a,b) for(int a = 0;a<b;a++) const int inf = 1e9; const ll infl = 1e18; int n,k; ll sq(ll a) { return a*a; } int l = 0,r = 0; ll dq[100000][5]; ll pref[100000]; vector<int> ord; int p[200][99999]; ll c[99999][2]; bool add(ll a,ll b,int i) { if(r < l) { r++; dq[r][0] = 0; dq[r][1] = infl; dq[r][2] = a; dq[r][3] = b; dq[r][4] = i; return 0; } vector<ll> c = {dq[r][0],dq[r][1],dq[r][2],dq[r][3],dq[r][4]}; if(c[2] == a) { if(c[3] > b) { r--; return 1; } } else { ll cu = (b-c[3])/(c[2]-a) + 1; if(cu <= c[0]) { r--; return 1; } else { dq[r][1] = cu-1; r++; dq[r][0] = 0; dq[r][1] = infl; dq[r][2] = a; dq[r][3] = b; dq[r][4] = i; } } return 0; } pair<ll,ll> check(ll c) { while(dq[l][1] < c) { l++; } return {c * dq[l][2] + dq[l][3],dq[l][4]}; } ll solve() { rep(q,k) { rep(i,n-1) { c[i][0] = c[i][1]; } l = 0; r = -1; while(add(0,inf,-1)); if(q == 0) { while(add(0,0,-1)); } rep(i,n-1) { p[q][i] = check(pref[i]).nd; c[i][1] = check(pref[i]).st; if(q != 0) { while(add(-2 * pref[i],c[i][0] + sq(pref[i])*2,i)); } } } l = 0; r = -1; rep(i,n-1) { while(add(-2 * pref[i],c[i][1] + sq(pref[i])*2,i)); } int ci = check(pref[n-1]).nd; int cu = k-1; while(ci != -1) { ord.pb(ci); ci = p[cu][ci]; cu--; } reverse(all(ord)); return check(pref[n-1]).st + pref[n-1]*pref[n-1]; } int32_t main() { cin>>n>>k; int cu; cin>>cu; pref[0] = cu; rep(i,n-1) { int c; cin>>c; pref[i+1] = pref[i]+c; } ll ans = solve(); cout<<(sq(pref[n-1])-ans)/2<<"\n"; rep(i,k) { cout<<ord[i]+1<<" "; } 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...