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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <bits/stdc++.h>

using namespace std;
vector<int>pol[3000];
bool spr[2000];
vector<pair<int,int> > rok;
int n,k;
int r=0;
queue<int>kol;
int bfs(int pos)
{   if(r!=0)
    kol.pop();

    r++;
   // cout<<pos<<endl;

    for(int i=0;i<pol[pos].size();i++)
    {
        if(spr[pol[pos][i]]==0)
        {//cout<<spr[pol[pos][i]]<<" "<<pol[pos][i]<<endl;
            kol.push(pol[pos][i]);
            spr[pol[pos][i]]=1;

        }

    }
while(!kol.empty())
{  // cout<<kol.front()<<endl;
    return bfs(kol.front());


}
if(kol.empty()||pos==0)
{
    return r;
}

}
int main()
{ int czji;
    int p=0;
int q=0;
   scanf("%d %d",&n,&czji);
   for(int i=0;i<n;i++)
   {
       for(int j=0;j<=i;j++)
       {
           scanf("%d",&r);
           rok.push_back(make_pair(r,q));

           if(q>0&&j!=i)
           {pol[q].push_back(q-i);
            }
           if(q>1&&j!=0)
         {
             pol[q].push_back(q-i-1);

         }

           q++;
       }

   }

   sort(rok.begin(),rok.end());
   bool m=0;
   q=0;
   r=0;
   while(q<n*(n+1)/2)
   {
       if(bfs(rok[q].second)<=czji)
        break;

       r=0;
       q++;
       for(int l=0;l<=rok[q].second;l++)
        {
            spr[l]=0;
        }


   }
 printf("%d",rok[q].first);


    return 0;
}