1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>
using namespace std;
int main(){
	ios_base::sync_with_stdio(0);
	int n,k;
	cin>>n>>k;
	int rok[(n*(n+1))/2], ile[(n*(n+1))/2], leweile[(n*(n+1))/2], praweile[(n*(n+1))/2];
	int min = 2019;
	int ojciec[(n*(n+1))/2];
	bool leweskrajne[(n*(n+1))/2], praweskrajne[(n*(n+1))/2];
	for(int i = 0; i < (n*(n+1))/2; i++){
		cin>>rok[i];
		ile[i] = 0;
		leweskrajne[i] = false;
		praweskrajne[i] = 0;
		leweile[i] = 0;
		praweile[i] = 0;
		ojciec[i] = false;
	}

	int x = 0;
	int j = 2;
	for(int i = 0; i < (n*(n+1))/2; i++){
		if(i > x){
			x+=j;
			j+=1;
		}
		if(i == x){
			praweskrajne[i] = true;
		}
		if(i == x-j+2){
			leweskrajne[i] = true;
		}
		ojciec[i] = j-2;
	//	cout<<i<<" "<<ojciec[i]<<endl;
	}

	leweile[0] = 0;
	praweile[0] = 0;
	for(int i = 1; i < (n*(n+1))/2; i++){
	//	cout<<i-ojciec[i]<<" "<<i - ojciec[i] - 1<<endl;
		if(leweskrajne[i]){
			leweile[i] = 0;
		//	cout<<i<<" "<<i-ojciec[i]<<endl;
			praweile[i] = praweile[i-ojciec[i]]+1;
		}
		else if(praweskrajne[i]){
			praweile[i] = 0;
			leweile[i] = leweile[i- ojciec[i]-1]+1;
		}
		else{
			leweile[i] = leweile[i-ojciec[i] -1] + praweile[i-ojciec[i]  -1] + 1;
			praweile[i] = praweile[i-ojciec[i]] + 1;
		}

		if(leweile[i] + praweile[i] + 1 <=k && min > rok[i]){
			min = rok[i];
		}
	}

	cout<<min;


}