Submission #1261622

#TimeUsernameProblemLanguageResultExecution timeMemory
1261622Hamed_GhaffariLiteh and Newfiteh (INOI20_litehfiteh)C++20
0 / 100
96 ms113472 KiB
#include <bits/stdc++.h>
using namespace std;

const int MXN = 1e5, LOG = 17, inf = 1e7;

int n, a[MXN], dp[MXN][LOG][LOG], ans[MXN+1];

int32_t main() {
    cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0);
    cin >> n;
    for(int i=0; i<n; i++) cin >> a[i];
    for(int i=n-1; i>=0; i--) {
        for(int k=0; k<LOG; k++)
            dp[i][0][k] = (k==a[i] ? 0 : inf);
        for(int j=1; i+(1<<j)<=n; j++)
            for(int k=0; j+k<=LOG; k++)
                dp[i][j][k] = min(inf,
                min(dp[i][j-1][k], dp[i][j-1][k+1]+1) +
                min(dp[i+(1<<(j-1))][j-1][k], dp[i+(1<<(j-1))][j-1][k+1]+1));
        if(a[i]==0) {
            ans[i] = ans[i+1];
            continue;
        }
        ans[i] = inf;
        for(int j=0; i+(1<<j)<=n; j++)
            ans[i] = min(ans[i], dp[i][j][1]+1 + ans[i+(1<<j)]);
    }
    cout << (ans[0]==inf ? -1 : ans[0]) << '\n';
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...