Pagini recente » Cod sursa (job #1718106) | Cod sursa (job #1649415) | Cod sursa (job #1609246) | Cod sursa (job #2316997) | Cod sursa (job #2784844)
#include <fstream>
#include <iostream>
using namespace std;
struct query {
int i1, j1, i2, j2;
};
const int LOG = 10;
query Q[75001];
int n, m;
int a[501][501];
int RMQ[501][501][LOG + 1];
int lg[501];
void read() {
int i, j, k;
ifstream f("plantatie.in");
f >> n >> m;
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
f >> a[i][j];
for (i = 1; i <= m; i++) {
f >> Q[i].i1 >> Q[i].j1;
f >> k;
Q[i].i2 = Q[i].i1 + k - 1, Q[i].j2 = Q[i].j1 + k - 1;
}
f.close();
}
void solve() {
int i, j, k, aux, Max;
for (i = 2; i <= n; i++)
lg[i] = lg[i / 2] + 1;
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
RMQ[i][j][0] = a[i][j];
for (k = 1; k <= LOG; k++)
for (i = 1; i <= n - (1 << k) + 1; i++)
for (j = 1; j <= n - (1 << k) + 1; j++)
RMQ[i][j][k] = max(max(RMQ[i][j][k - 1], RMQ[i][j + (1 << (k - 1))][k - 1]), max(RMQ[i + (1 << (k - 1))][j][k - 1], RMQ[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1]));
ofstream g("plantatie.out");
for (i = 1; i <= m; i++) {
aux = lg[Q[i].j2 - Q[i].j1 + 1];
Max = max(max(RMQ[Q[i].i1][Q[i].j1][aux], RMQ[Q[i].i1][Q[i].i2 - (1 << aux) + 1][aux]), max(RMQ[Q[i].i2 - (1 << aux) + 1][Q[i].j1][aux], RMQ[Q[i].i2 - (1 << aux) + 1][Q[i].j2 - (1 << aux) + 1][aux]));
g << Max << '\n';
}
g.close();
}
int main() {
read();
solve();
return 0;
}