Submission #331180

#TimeUsernameProblemLanguageResultExecution timeMemory
331180couplefireSplit the sequence (APIO14_sequence)C++17
71 / 100
1304 ms82284 KiB
#pragma GCC target ("avx2") #pragma GCC optimization ("O3") #pragma GCC optimization ("unroll-loops") #include <bits/stdc++.h> using namespace std; #define MAXN 100005 #define INF 1000000000000000000ll int n, kk; int h, t; long long sum[MAXN]; int arr[MAXN]; long long dp[MAXN][2]; int where[MAXN][201]; long long X(int i){ return sum[i]; } long long Y(int i){ return sum[i]*sum[i]-dp[i][0]; } long double slope(int i, int j){ if(X(i) == X(j)) return Y(j) > Y(i) ? INF : -INF; return (0.0+Y(j)-Y(i))/(0.0+X(j)-X(i)); } long long cost(int i, int j){ return dp[j][0]+sum[i]*sum[j]-sum[j]*sum[j]; } int main(){ // freopen("a.in", "r", stdin); ios_base::sync_with_stdio(false); cin.tie(0); cin >> n >> kk; for(int i = 1; i<=n; i++) cin >> arr[i]; for(int i = 1; i<=n; i++) sum[i] = sum[i-1]+arr[i]; for(int k = 1; k<=kk; k++){ h = 1, t = 0; int hull[n+5]; fill(hull, hull+n+5, 0); hull[++t] = 0; dp[0][1] = 0; for(int i = 1; i<=n; i++){ while(h < t && slope(hull[h], hull[h+1]) <= (long double) sum[i]) ++h; where[i][k] = hull[h]; dp[i][1] = cost(i, hull[h]); while(h < t && slope(hull[t-1], hull[t]) >= slope(hull[t], i)) --t; hull[++t] = i; } for(int i = 0; i<=n; i++) dp[i][0] = dp[i][1]; } cout << dp[n][1] << endl; int cur = n; for(int k = kk; k>=1; --k){ cout << where[cur][k] << " "; cur = where[cur][k]; } }

Compilation message (stderr)

sequence.cpp:2: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
    2 | #pragma GCC optimization ("O3")
      | 
sequence.cpp:3: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
    3 | #pragma GCC optimization ("unroll-loops")
      |
#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...