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
#include <iostream>
#include <algorithm>

using namespace std;

int main () {
    int n, k;
    cin >> n >> k;
    int liczba_butelek = n*(n + 1)/2;

    int **butelki;
    butelki = new int *[n+1];
    int licznik = 0;
    int lata[liczba_butelek];

    for (int i=1; i <= n; i++) {
        butelki[i] = new int [i+1];
        for (int j=1; j <= i; j++) {
            cin >> lata[licznik];
            butelki[i][j] = lata[licznik];
            licznik++;
        }
    }

    sort(lata, lata + liczba_butelek);

    int x, x1, x2, y;
    for (int l=0; l < liczba_butelek; l++) {
        for (int i=1; i <= n; i++) {
            for (int j=1; j <= i; j++) {
                if (butelki[i][j] == lata[l]) {
                    x = j;
                    y = i;
                    break;
                }
            }
        }
        // Sprawdza czy jest dostep do butelki
        licznik=1;
        x1 = x;
        x2 = x;
        for (int i=y-1; i > 0; i--) {
            x1 = max(x1-1, 1);
            x2 = min(x2+1, i);
            licznik += (x2-x1+1);
        }

        if (licznik <= k) {
            cout << butelki[y][x];
            break;
        }
    }

    delete butelki;

    return 0;
}