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
#include <iostream>
#include <string>
#include <vector>

using namespace std;
size_t split(const std::string &txt, std::vector<std::string> &strs, char ch)
{
    size_t pos = txt.find( ch );
    size_t initialPos = 0;
    strs.clear();

    // Decompose statement
    while( pos != std::string::npos ) {
        strs.push_back( txt.substr( initialPos, pos - initialPos ) );
        initialPos = pos + 1;

        pos = txt.find( ch, initialPos );
    }

    // Add the last one
    strs.push_back( txt.substr( initialPos, std::min( pos, txt.size() ) - initialPos + 1 ) );

    return strs.size();
}
int main(){
string rawInput;
vector<string> years;
getline(cin, rawInput);
split( rawInput, years, ' ' );
int n = stoi(years.at(0));
int k = stoi(years.at(1));
years.clear();
if(n < 1 || n > 2000)
    return -1;
if(k < 1 || k > n*(n + 1)/2)
    return -1;
int tab[n][n*(n+1)/2];
for(int i = 0; i < n; i++){
    getline( cin, rawInput);
    split( rawInput, years, ' ' );
    for(int j = 0; j <= i; j++){
        if((stoi(years.at(j)) < 1) || (stoi(years.at(j)) > 2019))
            return -1;
        tab[i][j] = stoi(years.at(j));
    }
    years.clear();
}
int bottles = k;
int row = 1;
while(bottles > row){
    bottles -= row;
    row++;
}
row--;

int year = tab[row][0];
for(int i = 0; i < (row+1); i++){
    if(tab[row][i] < year)
        year = tab[row][i];
}
    std::cout << year;
return 0;
}