제출 #908535

#제출 시각아이디문제언어결과실행 시간메모리
908535sofija6수열 (APIO14_sequence)C++14
33 / 100
97 ms131072 KiB
#include <bits/stdc++.h> #define ll long long #define MAXN 100010 #define MAXK 210 using namespace std; ll a[MAXN],dp[MAXN][2],prevv[MAXN][MAXK],pref[MAXN]; struct line { long double k,m; long double Calc(ll x) { return k*x+m; } long double Intersect(line l) { return (m-l.m)/(l.k-k); } }; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); ll n,k; cin >> n >> k; for (ll i=1;i<=n;i++) { cin >> a[i]; pref[i]=pref[i-1]+a[i]; } deque<pair<line,ll> > d; for (ll i=1;i<n;i++) dp[i][0]=pref[i]*(pref[n]-pref[i]); for (ll j=2;j<=k;j++) { d.clear(); d.push_front({{-pref[j-1],dp[j-1][0]},j-1}); for (ll i=j;i<n;i++) { while (d.size()>1) { ll sz=d.size(); if (d[sz-1].first.Calc(pref[n]-pref[i])<=d[sz-2].first.Calc(pref[n]-pref[i])) d.pop_back(); else break; } dp[i][1]=d.back().first.Calc(pref[n]-pref[i])+pref[i]*(pref[n]-pref[i]); prevv[i][j]=d.back().second; line cur={-pref[i],dp[i][0]}; while (d.size()>1 && cur.Intersect(d[0].first)>=d[0].first.Intersect(d[2].first)) d.pop_front(); d.push_front({cur,i}); } d.clear(); for (ll i=1;i<n;i++) dp[i][0]=dp[i][1]; } ll maxx=LLONG_MIN,pos=0; for (ll i=k;i<n;i++) { if (dp[i][0]>=maxx) { maxx=dp[i][0]; pos=i; } } cout << maxx << "\n"; for (ll i=k;i>0;i--) { cout << pos << " "; pos=prevv[pos][i]; } return 0; } /** 7 3 4 1 3 4 0 2 3 **/

컴파일 시 표준 에러 (stderr) 메시지

sequence.cpp: In function 'int main()':
sequence.cpp:35:24: warning: narrowing conversion of '- pref[(j - 1)]' from 'long long int' to 'long double' [-Wnarrowing]
   35 |         d.push_front({{-pref[j-1],dp[j-1][0]},j-1});
      |                        ^~~~~~~~~~
sequence.cpp:35:44: warning: narrowing conversion of 'dp[(j - 1)][0]' from 'long long int' to 'long double' [-Wnarrowing]
   35 |         d.push_front({{-pref[j-1],dp[j-1][0]},j-1});
      |                                   ~~~~~~~~~^
sequence.cpp:48:23: warning: narrowing conversion of '- pref[i]' from 'long long int' to 'long double' [-Wnarrowing]
   48 |             line cur={-pref[i],dp[i][0]};
      |                       ^~~~~~~~
sequence.cpp:48:39: warning: narrowing conversion of 'dp[i][0]' from 'long long int' to 'long double' [-Wnarrowing]
   48 |             line cur={-pref[i],dp[i][0]};
      |                                ~~~~~~~^
#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...