Submission #1098603

#TimeUsernameProblemLanguageResultExecution timeMemory
1098603flyingkite수열 (APIO14_sequence)C++17
100 / 100
1060 ms86212 KiB
#include<bits/stdc++.h>
#define all(x) (x).begin() , (x).end()
#define pll pair<long long, long long>
#define pii pair<int , int>
#define fi first
#define se second
#define bit(i,j) ((j >> i) & 1)
using namespace std;
 
#define int long long
 
const long long inf = 1e18+1;
const int mod = 998244353;
const int MAXN = 100000;
 
int x[MAXN+10] , pre[MAXN + 10];
int dp[MAXN+10] , lst[MAXN+ 10] ;int32_t trace[MAXN+10][210];
 
void compute(int l , int r , int optl , int optr , int k){
    if(l > r) return;
    int m = l + r >> 1;
    pll res = {-1e18 , -1};
    for(int i = optl ; i <= min(m , optr) ; i++){
        int t = lst[i-1] + ((pre[m] - pre[i-1]) * pre[i-1]);
        res= max(res , {t ,  i});
    }
    trace[m][k] = res.se-1;
    dp[m] = res.fi;
    int opt = res.se;
    compute(l , m-1 , optl , opt , k);
    compute(m + 1 , r , opt,  optr , k);
}
void solve(){
    int n , k; cin >> n >> k;
    for(int i = 1 ; i <= n ; i++){
        cin >> x[i];
        pre[i] = pre[i-1] + x[i];
    }
    for(int i = 1 ; i <= n ; i++) lst[i] = -inf;
    lst[0] = 0;
    for(int i = 1 ; i <= k+1; i++){
        compute(1 , n , 1 , n , i);
        for(int i = 0 ; i <= n ; i ++) lst[i] = dp[i];
    }
    cout << lst[n] << "\n";
    int t = n , h = k + 1;
    while(h>0){
        if(trace[t][h] != 0) cout << trace[t][h] << " ";
        t = trace[t][h];
        h--;
    }
    cout << "\n";    
}
    
int32_t main(){
      //freopen("PAT.INP", "r", stdin);
    //freopen("PAT.OUT", "w", stdout);
    ios_base::sync_with_stdio(0); cin.tie(0);
    solve();
    return 0;
}
//

Compilation message (stderr)

sequence.cpp: In function 'void compute(long long int, long long int, long long int, long long int, long long int)':
sequence.cpp:21:15: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   21 |     int m = l + r >> 1;
      |             ~~^~~
#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...