Submission #591053

# Submission time Handle Problem Language Result Execution time Memory
591053 2022-07-06T19:14:04 Z fuad27 K blocks (IZhO14_blocks) C++17
0 / 100
1 ms 212 KB
/*
 * Created: 2022-07-06 12:51
*/
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace __gnu_pbds;
using namespace std;
using namespace chrono;
// using namespace atcoder

template <typename T>
using ordered_set =
    tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

typedef long long ll;
typedef long double ld;
const ll inf = 1e18;

#define pii		pair<int,int>
#define pll		pair<ll,ll>
#define vi		vector<int>
#define vll		vector<ll>
#define rep(i, a, b)	for(int i = (a);i<(b);i++)
#define repn(i, a, b)	for(int i = (a);i>=(b);i--)
#define ss		second
#define ff		first
#define mkp		make_pair
#define pb		push_back

#define all(x)		(x).begin(), (x).end()
const int N = 100'010;
long long T[2*N];
int n;
int sz;
void build(long long a[]) {
	for(int i = 0;i<sz;i++)T[i+sz]=a[i];
	for(int i = sz-1;i>0;i--)T[i]=min(T[i<<1],T[i<<1|1]);
}
ll query(int l, int r) {
	ll res=inf;
	for(l+=sz,r+=sz;l<r;l>>=1ll,r>>=1ll) {
		if(l&1)res=min(res, T[l++]);
		if(r&1)res=min(res, T[--r]);
	}
	return res;
}
void solve() {
	int k;
	cin >> n >> k;
	sz=n+1;
	ll dp[k+1][n+1];
	ll a[n+1];
	rep(i, 1, n+1)cin >> a[i];
	a[0]=inf;
	vector<int> stk;
	vector<int> pr(n+1);
	stk.push_back(0);
	rep(i, 1, n+1) {
		while(a[stk.back()]<=a[i])stk.pop_back();
		pr[i]=stk.back();
		stk.pb(i);
	}
	rep(i, 1, k+1) {
		dp[i][0]=1;
	}
	rep(i, 1, n+1)dp[0][i]=inf;
	dp[0][0]=0;
	rep(j, 1, k+1) {
		build(dp[j-1]);
		rep(i, 1, n+1) {
			if(pr[i]!=0)dp[j][i] = min(query(pr[i]+1,i)+a[i], dp[j][pr[i]]);
			else dp[j][i]=query(pr[i]+1,i)+a[i];
		}
	}
	cout<<dp[k][n]<<"\n";
}

int main () {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t = 1;
	while(t--) {
		solve();
	}
	return 0;
}
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -