Pagini recente » Cod sursa (job #895083) | Cod sursa (job #2859768) | Cod sursa (job #917302) | Cod sursa (job #6009) | Cod sursa (job #2898409)
#include <fstream>
using namespace std;
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
const int NMAX = 5e2;
int rmq[11][11][NMAX + 1][NMAX + 1], lg2[NMAX + 1], n, q;
int max4(int a, int b, int c, int d){
return max(a, max(b, max(c, d)));
}
int ans(int x1, int y1, int x2, int y2){
int nrlin = x2 - x1 + 1;
int nrcol = y2 - y1 + 1;
int ei = lg2[nrlin];
int ej = lg2[nrcol];
int pi = (1 << ei);
int pj = (1 << ej);
return max4(rmq[ei][ej][x1 + pi - 1][y1 + pj - 1], rmq[ei][ej][x1 + pi - 1][y2], rmq[ei][ej][x2][y1 + pj - 1], rmq[ei][ej][x2][y2]);
}
int main(){
cin >> n >> q;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
cin >> rmq[0][0][i][j];
}
}
lg2[1] = 0;
for(short i = 2; i <= n; i++)
lg2[i] = 1 + lg2[i >> 1];
// RMQ
for(int f = 1; f <= lg2[n]; f++){
for(int i = 1; i <= n; i++){
for(int j = (1 << f); j <= n; j++){
int t = (1 << (f - 1));
rmq[0][f][i][j] = max(rmq[0][f - 1][i][j - t], rmq[0][f - 1][i][j]);
}
}
}
for(int e = 1; e <= lg2[n]; e++){
for(int f = 0; f <= lg2[n]; f++){
for(int i = (1 << e); i <= n; i++){
for(int j = (1 << f); j <= n; j++){
int t = (1 << (e - 1));
rmq[e][f][i][j] = max(rmq[e - 1][f][i - t][j], rmq[e - 1][f][i][j]);
}
}
}
}
int lin = 0, col = 0, lat = 0;
for(int i = 1; i <= q; i++){
cin >> lin >> col >> lat;
cout << ans(lin, col, lin + lat - 1, col + lat - 1) << "\n";
}
return 0;
}