답안 #639346

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
639346 2022-09-09T14:13:43 Z LeticiaFCS K개의 묶음 (IZhO14_blocks) C++17
0 / 100
1 ms 340 KB
#include "bits/stdc++.h"
#define MIN_DP first
#define MAX_A second
using lint = long long;
constexpr lint LINF = 0x3f3f3f3f3f3f3f3f;
using namespace std;

//21+18+14 pts


lint dp[102][100002];
lint a[100002];

lint max_suf[100002], min_dp_menos1[100002], min_dp_mais_max[100002];

int n, k; 
void init(){
	for(int qtd = 0; qtd <= k; qtd++)
		for(int i=0; i<=n; i++)
			dp[qtd][i] = LINF;
	dp[0][0] = 0;
}

lint naive_max(int i, int j){
	lint val = a[i];
	for(int k=i; k<= j; k++)
		val = max(val, a[k]);
	return val;
}


void print(int qtd, int i){
	//cout<<"dp["<<qtd<<"]["<<i<<"] = "<<dp[qtd][i]<<"\n";
}


using str = pair<lint, lint>; // mindp_suf, max_a_suf

int main() {
	cin.tie(nullptr)->sync_with_stdio(false);
	
	cin>>n>>k;
	init();
	
	for(int i=1; i<= n; i++)
		cin>>a[i];
	
	
	for(int qtd=1; qtd <=k; qtd++){
		vector<str> stack;
		for(int i=1; i<=n; i++){
			lint min_dp = dp[qtd-1][i-1];
			
			//se eu não der pop encontrei um a[j] > a[i] então tudo bem :D
			while(!stack.empty() && stack.back().MAX_A <= a[i]){
				min_dp = min(min_dp, stack.back().MIN_DP);
				stack.pop_back();
			}
			
			// se eu der pop a resposta que encontrei agora é melhor que anterior então tudo bem!
			//se eu não der pop então como a[j] > a[i] o min_dp[j] < min_dp_atual o que não estraga se eu achar um cara > a[j] depois!
						
			while(!stack.empty()
				   && min_dp + a[i] < stack.back().MAX_A + stack.back().MIN_DP){
				stack.pop_back();
			}
			
			// como min_dp[j] < min_dp_atual se eu não melhoro o min_dp + a[i] posso jogar fora porque o próximo min_dp é menor com certeza!!
			 
			if(stack.empty() || min_dp + a[i] < stack.back().MAX_A + stack.back().MIN_DP){
				stack.push_back({min_dp, a[i]});
			}
			dp[qtd][i] = stack.front().MIN_DP + stack.front().MAX_A;
		}
	}
	cout<<dp[k][n]<<"\n";
	

	return 0;
}
/*
[  ]Leu o problema certo???
[  ]Ver se precisa de long long
[  ]Viu o limite dos fors (é n? é m?)
[  ]Tamanho do vetor, será que é 2e5 em vez de 1e5??
[  ]Testar sample
[  ]Testar casos de  borda
[  ]1LL no 1LL << i
[  ]Testar mod (é 1e9+7, mesmo?, será que o mod não ficou negativo?)
*/
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 0 ms 340 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 0 ms 340 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
11 Incorrect 0 ms 340 KB Output isn't correct
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 0 ms 340 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 0 ms 340 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
11 Incorrect 0 ms 340 KB Output isn't correct
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 0 ms 340 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 0 ms 340 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
11 Incorrect 0 ms 340 KB Output isn't correct
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 0 ms 340 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 0 ms 340 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
11 Incorrect 0 ms 340 KB Output isn't correct
12 Halted 0 ms 0 KB -