행렬을 2×2 정사각형으로 나눈다. ->
/2를 하면서 /2가 된 지점을 기점으로 (y, x), (y+1, x), (y, x+1), (y+1, x+1)를 비교한다 (단 2번째 큰 수 이므로 vector에다가 넣어서 정렬해서 가져온다)
#include<bits/stdc++.h>
using namespace std;
#define MAX 1050
int arr[MAX][MAX];
int division(int y, int x, int size) {
vector<int> v;
if (size == 1) {
v.push_back(arr[y][x]);
v.push_back(arr[y][x + 1]);
v.push_back(arr[y + 1][x]);
v.push_back(arr[y + 1][x + 1]);
sort(v.begin(), v.end());
return v[2];
}
v.push_back(division(y, x, size / 2));
v.push_back(division(y + size, x, size / 2));
v.push_back(division(y, x + size, size / 2));
v.push_back(division(y + size, x + size, size / 2));
sort(v.begin(), v.end());
return v[2];
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int n; cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> arr[i][j];
}
}
cout << division(0, 0, n / 2) << '\n';
return 0;
}