Pagini recente » Cod sursa (job #2424985) | Cod sursa (job #3128379) | Cod sursa (job #825449) | Cod sursa (job #58058) | Cod sursa (job #1201795)
#include <fstream>
#define DIMN 501
#define MLOG 11
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int RMQ[DIMN][DIMN][MLOG], B[DIMN];
int n, q, ll, x, y, z;
inline int maxim (int x, int y, int z, int t) {
x = x<y ? y : x;
x = x<z ? z : x;
x = x<t ? t : x;
return x;
}
int main() {
f >> n >> q;
for (int i=1; i<=n; ++i)
for (int j=1; j<=n; ++j)
f >> RMQ[i][j][0];
for (int l=1; (1<<l)<=n; ++l) {
ll = (1<<(l-1));
for (int i=1; i<=n; ++i)
for (int j=1; j<=n; ++j)
if ( i+ll>n && j+ll <= n)
RMQ[i][j][l]=maxim(RMQ[i][j][l-1],RMQ[i][j+ll][l-1],0,0);
else
if ( i+ll<=n && j+ll > n)
RMQ[i][j][l]=maxim(RMQ[i][j][l-1],0,RMQ[i+ll][j][l-1],0);
else
if ( i+ll > n && j+ll > n)
RMQ[i][j][l] = RMQ[i][j][l-1];
else
RMQ[i][j][l]=maxim(RMQ[i][j][l-1],RMQ[i][j+ll][l-1],RMQ[i+ll][j][l-1],RMQ[i+ll][j+ll][l-1]);
}
for (int i=2; i<=n; ++i)
B[i] = B[i/2] + 1;
for (;q;--q) {
f >> x >> y >> z;
int l = B[z];
g << maxim(RMQ[x][y][l],RMQ[x+z-(1<<l)][y][l],RMQ[x][y+z-(1<<l)][l],RMQ[x+z-(1<<l)][y+z-(1<<l)][l]) << "\n";
}
return 0;
}