Pagini recente » Cod sursa (job #46009) | Cod sursa (job #347372) | Cod sursa (job #918950) | Cod sursa (job #644220) | Cod sursa (job #2905741)
#include <fstream>
#include <iostream>
using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");
const int Nmax = 500;
int log2[Nmax], n, m, teren[Nmax][Nmax], a[Nmax][Nmax][Nmax];
int main() {
in >> n >> m;
for(int i = 1; i <= n; ++ i)
for(int j = 1; j <= n; ++ j)
in >> teren[i][j];
log2[1] = 0;
for(int i = 2; i <= n; ++ i)
log2[i] = log2[i >> 1] + 1;
for(int i = 1; i <= n; ++ i)
for(int j = 1; j <= n; ++ j)
a[0][i][j] = teren[i][j];
for(int k = 1; (1 << k) <= n; ++ k)
for(int i = 1; i <= n - (1 << k) + 1; ++ i)
for(int j = 1; j <= n - (1 << k) + 1; ++ j)
a[k][i][j] = max(max(a[k - 1][i][j], a[k - 1][i][j + (1 << (k - 1))]), max(a[k - 1][i + (1 << (k - 1))][j], a[k - 1][i + (1 << (k - 1))][j + (1 << (k - 1))]));
// for(int k = 0; (1 << k) <= n; ++ k)
// for(int i = 1; i <= n - (1 << k) + 1; ++ i)
// for(int j = 1; j <= n - (1 << k) + 1; ++ j)
// cout << a[k][i][j] << ' ';
int i, j, k, p, result;
while(m --) {
in >> i >> j >> k;
p = log2[k];
result = max(max(a[p][i][j], a[p][i][j + k - (1 << p)]), max(a[p][i + k - (1 << p)][j], a[p][i + k - (1 << p)][j + k - (1 << p)]));
out << result << '\n';
}
//
return 0;
}