Pagini recente » Cod sursa (job #3030105) | Clasament arhiva | Cod sursa (job #3171960) | Cod sursa (job #1662902) | Cod sursa (job #3297822)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
const int MAXN = 505;
const int LOG = 9;
int n, m;
int a[MAXN][MAXN];
int sp[LOG + 1][MAXN][MAXN];
int log2table[MAXN];
void logs() {
log2table[1] = 0;
for (int i = 2; i < MAXN; ++i)
log2table[i] = log2table[i / 2] + 1;
}
void sparse_table() {
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
sp[0][i][j] = a[i][j];
for (int k = 1; (1 << k) <= n; ++k) {
int len = 1 << (k - 1);
for (int i = 0; i + (1 << k) <= n; ++i) {
for (int j = 0; j + (1 << k) <= n; ++j) {
int m1 = sp[k - 1][i][j];
int m2 = sp[k - 1][i + len][j];
int m3 = sp[k - 1][i][j + len];
int m4 = sp[k - 1][i + len][j + len];
sp[k][i][j] = max(max(m1, m2), max(m3, m4));
}
}
}
}
int query_solve(int i, int j, int k) {
i--;
j--;
int p = log2table[k];
int len = 1 << p;
int i2 = i + k - len;
int j2 = j + k - len;
int m1 = sp[p][i][j];
int m2 = sp[p][i2][j];
int m3 = sp[p][i][j2];
int m4 = sp[p][i2][j2];
return max(max(m1, m2), max(m3, m4));
}
int main() {
fin >> n >> m;
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
fin >> a[i][j];
logs();
sparse_table();
for (int q = 0; q < m; ++q) {
int i, j, k;
fin >> i >> j >> k;
fout << query_solve(i, j, k) << '\n';
}
return 0;
}