Pagini recente » Cod sursa (job #2736572) | Cod sursa (job #1051061) | Cod sursa (job #548299) | Cod sursa (job #169501) | Cod sursa (job #2929759)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("plantatie.in");
ofstream fout ("plantatie.out");
const int kN = 5e2 + 5;
const int kL = 10;
int m[kN][kN][kL], lg[kN];
int n, q;
int solve (int x1, int y1, int x2, int y2){
int ans = -INT_MAX, k = lg[x2 - x1 + 1];
ans = max(ans, m[x1][y1][k]);
ans = max(ans, m[x2 - (1 << k) + 1][y1][k]);
ans = max(ans, m[x1][y2 - (1 << k) + 1][k]);
ans = max(ans, m[x2 - (1 << k) + 1][y2 - (1 << k) + 1][k]);
return ans;
}
int main(){
fin >> n >> q;
for (int i = 1; i <= n; i++){
for (int j = 1; j <= n; j++){
int x; fin >> x;
m[i][j][0] = x;
}
}
for (int j = 1; j < kL; j++){
for (int i = 1; i + (1 << j) - 1 <= n; i++){
for (int k = 1; k + (1 << j) - 1 <= n; k++){
m[i][k][j] = max(m[i][k][j - 1], m[i + (1 << (j - 1))][k][j - 1]);
m[i][k][j] = max(m[i][k][j], m[i][k + (1 << (j - 1))][j - 1]);
m[i][k][j] = max(m[i][k][j], m[i + (1 << (j - 1))][k + (1 << (j - 1))][j - 1]);
}
}
}
lg[1] = 0;
for (int i = 2; i < kN; i++){
lg[i] = lg[i / 2] + 1;
}
while (q--){
int i, j, k; fin >> i >> j >> k;
fout << solve(i, j, i + k - 1, j + k - 1) << '\n';
}
}