Pagini recente » Cod sursa (job #301154) | Cod sursa (job #77345) | Cod sursa (job #1892780) | Cod sursa (job #2523537) | Cod sursa (job #3141362)
#include <bits/stdc++.h>
using namespace std;
int a[501][501];
int rmq_2d[501][501][9];
int _log[501];
int main() {
int i, j, n, m, pas, k;
freopen("plantatie.in", "r", stdin);
freopen("plantatie.out", "w", stdout);
scanf("%d%d", &n, &m);
for(i = 1; i <= n; i++)
for(j = 1; j <= n; j++)
scanf("%d", &a[i][j]);
for(i = 2; i <= n; i++)
_log[i] = _log[i / 2] + 1;
for(pas = 0; pas <= _log[n]; pas++)
for(i = 1; i + (1 << pas) <= n + 1; i++)
for(j = 1; j + (1 << pas) <= n + 1; j++)
if(pas == 0) rmq_2d[i][j][0] = a[i][j];
else rmq_2d[i][j][pas] = max( max(rmq_2d[i][j][pas - 1], rmq_2d[i][j + (1 << (pas - 1))][pas - 1]),
max(rmq_2d[i + (1 << (pas - 1))][j][pas - 1], rmq_2d[i + (1 << (pas - 1))][j + (1 << (pas - 1))][pas - 1]));
while(m--){
scanf("%d%d%d", &i, &j, &k);
int p2 = 1 << _log[k];
printf("%d\n", max( max(rmq_2d[i][j][_log[k]], rmq_2d[i + k - p2][j][_log[k]]),
max(rmq_2d[i][j + k - p2][_log[k]], rmq_2d[i + k - p2][j + k - p2][_log[k]])));
}
return 0;
}