#include #include #include using namespace std; const int NMAX = 40; int N, M, K, L; int a, b, c, d; int cub[NMAX][NMAX][NMAX][NMAX]; set < pair > qi[NMAX][NMAX][NMAX], qj[NMAX][NMAX][NMAX], qk[NMAX][NMAX][NMAX], ql[NMAX][NMAX][NMAX]; void citeste() { cin >> N >> M >> K >> L; cin >> a >> b >> c >> d; for (int i = 1; i <= N; i++) for (int j = 1; j <= M; j++) for (int k = 1; k <= K; k++) for (int l = 1; l <= L; l++) { cin >> cub[i][j][k][l]; /*s[i][j][k][l] = cub[i][j][k][l] + s[i - 1][j][k][l] + s[i][j - 1][k][l] + s[i][j][k - 1][l] + s[i][j][k][l - 1] - 3 * s[i - 1][j - 1][k - 1][l - 1];*/ } } int get_crt(int i, int j, int k, int l) { set < pair > :: iterator it; int sol; it = qi[j][k][l].begin(); sol = (-1) * (*it).first; it = qj[i][k][l].begin(); sol = max(sol, (-1) * (*it).first); it = qk[i][j][l].begin(); sol = max(sol, (-1) * (*it).first); it = ql[i][j][k].begin(); sol = max(sol, (-1) * (*it).first); return sol; } void rezolva() { int sol; pair p; for (int i = 1; i <= a; i++) for (int j = 1; j <= b; j++) for (int l = 1; l <= c; l++) for (int k = 1; k <= d; k++) { p.second = i; p.first = (-1) * cub[i][j][k][l]; qi[j][k][l].insert(p); p.second = j; qj[i][k][l].insert(p); p.second = k; qk[i][j][l].insert(p); p.second = l; ql[i][j][k].insert(p); } sol = get_crt(a, b, c, d); set < pair > :: iterator it; for (int i = a; i <= N; i++) for (int j = b; j <= M; j++) for (int k = c; k <= K; k++) for (int l = d; l <= L; l++) { p.first = (-1) * cub[i][j][k][l]; if (i != a) { p.second = i; it = qi[j][k][l].find(p); if (it != qi[j][k][l].end()) qi[j][k][l].erase(it); } if (j != b) { p.second = j; it = qj[i][k][l].find(p); if (it != qj[i][k][l].end()) qj[i][k][l].erase(it); } if (k != c) { p.second = k; it = qk[i][j][l].find(p); if (it != qk[i][j][l].end()) qk[i][j][l].erase(it); } if (l != d) { p.second = l; it = ql[i][j][k].find(p); if (it != ql[i][j][k].end()) ql[i][j][k].erase(it); } p.second = i; if (i != a) qi[j][k][l].insert(p); p.second = j; if (j != b) qj[i][k][l].insert(p); p.second = k; if (k != c) qk[i][j][l].insert(p); p.second = l; if (l != d) ql[i][j][k].insert(p); sol = min(sol, get_crt(i, j, k, l)); } cout << sol << '\n'; } int main() { citeste(); rezolva(); return 0; }