Submission #1084999

# Submission time Handle Problem Language Result Execution time Memory
1084999 2024-09-07T09:56:15 Z xnqs K blocks (IZhO14_blocks) C++17
0 / 100
1 ms 348 KB
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
#include <cstring>

int x, k;
int arr[100005];
int dp[105][100005];
int pge[100005];
int tree[400005];

void update(int node, int l, int r, int pos, int val) {
	if (l==r) {
		tree[node] = val;
		return;
	}

	int m = (l+r)>>1;
	if (pos<=m) {
		update(node<<1,l,m,pos,val);
	}
	else {
		update(node<<1|1,m+1,r,pos,val);
	}
	tree[node] = std::min(tree[node<<1],tree[node<<1|1]);
}

int query(int node, int l, int r, int st, int fi) {
	if (l>fi||r<st) {
		return 0x3f3f3f3f;
	}
	if (st<=l&&r<=fi) {
		return tree[node];
	}

	int m = (l+r)>>1;
	return std::min(query(node<<1,l,m,st,fi),query(node<<1|1,m+1,r,st,fi));
}

void augment(int p) {
	for (int i = 0; i < p; i++) {
		dp[p][i] = 0x3f3f3f3f;
	}
	for (int i = p; i <= x; i++) {
		dp[p][i] = 0x3f3f3f3f;
		int pos = i;
		while (pos>0) {
			int next = pge[pos];
			int tmp = query(1,0,x,next,pos-1) + arr[pos];
			dp[p][i] = std::min(dp[p][i], tmp);
			if (tmp-dp[p][i]>500) {
				break;
			}
			pos = next;
		}
	}

	for (int i = 0; i <= x; i++) {
		update(1,0,x,i,dp[p][i]);
	}
}

int main() {
	std::ios_base::sync_with_stdio(false);
	std::cin.tie(NULL);
	std::cout.tie(NULL);
 
	std::cin >> x >> k;
	std::vector<int> stk;
	for (int i = 1; i <= x; i++) {
		std::cin >> arr[i];
		while (!stk.empty()&&arr[i]>=arr[stk.back()]) {
			stk.pop_back();
		}
		pge[i] = ((stk.empty()) ? 0 : stk.back());
		stk.emplace_back(i);
	}

	for (int i = 1; i <= x; i++) {
		dp[1][i] = std::max(dp[1][i-1],arr[i]);
	}
	dp[1][0] = 0x3f3f3f3f;
	for (int i = 0; i <= x; i++) {
		update(1,1,x,i,dp[1][i]);
	}
	for (int p = 2; p <= k; p++) {
		augment(p);
	}

	std::cout << dp[k][x] << "\n";
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Incorrect 0 ms 348 KB Output isn't correct
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Incorrect 0 ms 348 KB Output isn't correct
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Incorrect 0 ms 348 KB Output isn't correct
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Incorrect 0 ms 348 KB Output isn't correct
6 Halted 0 ms 0 KB -