Pagini recente » Cod sursa (job #1234092) | Cod sursa (job #3296441) | Cod sursa (job #1213244) | Cod sursa (job #1272156) | Cod sursa (job #3301729)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int rmq[9][9][501][501];
int A[501][501];
int main() {
int n,q;
fin>>n>>q;
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
fin>>A[i][j];
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
rmq[0][0][i][j] = A[i][j];
for (int ky = 1; ky < 9; ky++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j + (1<<ky) <= n; j++) {
rmq[0][ky][i][j] = max(rmq[0][ky-1][i][j], rmq[0][ky-1][i][j + (1<<(ky-1))]);
}
}
}
for (int kx = 1; kx < 9; kx++) {
for (int ky = 0; ky < 9; ky++) {
for (int i = 0; i + (1<<kx) <= n; i++) {
for (int j = 0; j + (1<<ky) <= n; j++) {
rmq[kx][ky][i][j] = max(rmq[kx-1][ky][i][j],rmq[kx-1][ky][i + (1<<(kx-1))][j]);
}
}
}
}
int lg[502];
lg[1] = 0;
for(int i = 2; i <= n; i++)
lg[i] = lg[i/2] + 1;
while(q--) {
int x1,y1,ll;
fin>>x1>>y1>>ll;
x1--;
y1--;
int k = lg[ll];
int x2 = x1 + ll - (1<<k);
int y2 = y1 + ll - (1<<k);
int m1 = max(rmq[k][k][x1][y1], rmq[k][k][x1][y2]);
int m2 = max(rmq[k][k][x2][y1], rmq[k][k][x2][y2]);
fout << max(m1, m2) << "\n";
}
return 0;
}