Pagini recente » Cod sursa (job #3165284) | Cod sursa (job #2560604) | Cod sursa (job #2378888) | Cod sursa (job #2383210) | Cod sursa (job #3160081)
#include <fstream>
#include <climits>
#define DIM 501
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int n, m;
int r[10][DIM][DIM];
int E[DIM];
int max4(int a, int b, int c, int d) {
return max(max(a, b), max(c, d));
}
void build() {
for (int power = 1; (1 << power) <= n; power++) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
r[power][i][j] = r[power - 1][i][j];
int i2 = i + (1 << (power - 1));
int j2 = j + (1 << (power - 1));
if (i2 <= n && j2 <= n) {
r[power][i][j] = max4(r[power][i][j], r[power - 1][i][j2], r[power - 1][i2][j], r[power - 1][i2][j2]);
}
}
}
}
}
void buildPowerArray() {
E[1] = 0;
for (int i = 2; i <= n; i++) {
E[i] = 1 + E[i / 2];
}
}
int query(int i1, int j1, int k) {
int power = E[k];
int i2 = i1 + (k - (1 << power));
int j2 = j1 + (k - (1 << power));
int a = r[power][i1][j1];
int b = r[power][i1][j2];
int c = r[power][i2][j1];
int d = r[power][i2][j2];
return max4(a, b, c, d);
}
int main()
{
fin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
fin >> r[0][i][j];
}
}
build();
buildPowerArray();
for (int i = 1; i <= m; i++) {
int i1, j1, k;
fin >> i1 >> j1 >> k;
fout << query(i1, j1, k) << "\n";
}
}