Pagini recente » Cod sursa (job #2384754) | Cod sursa (job #119957) | Cod sursa (job #1005783) | Cod sursa (job #213069) | Cod sursa (job #2784837)
#include <fstream>
#include <iostream>
using namespace std;
struct query {
int i1, j1, i2, j2;
};
const int LOG = 9;
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 (j = 1; j <= LOG; j++)
for (k = 1; k + (1 << j) - 1 <= n; k++)
RMQ[i][k][j] = max(RMQ[i][k][j - 1], RMQ[i][k + (1 << (j - 1))][j - 1]);
}
ofstream g("plantatie.out");
for (i = 1; i <= m; i++) {
Max = 0;
aux = lg[Q[i].j2 - Q[i].j1 + 1];
for (j = Q[i].i1; j <= Q[i].i2; j++)
Max = max(Max, max(RMQ[j][Q[i].j1][aux], RMQ[j][Q[i].j2 - (1 << aux) + 1][aux]));
g << Max << '\n';
}
g.close();
}
int main() {
read();
solve();
return 0;
}