Pagini recente » Cod sursa (job #822648) | Cod sursa (job #425049) | Cod sursa (job #72559) | Cod sursa (job #2233598) | Cod sursa (job #1081319)
#include <fstream>
#include <math.h>
using namespace std;
ifstream f ("plantatie.in");
ofstream g("plantatie.out");
int v[505], RMQ[10][505][505];
int i, n, m, j, l, lg, x, y, k;
void init()
{
v[1] = 0;
for(int i = 2; i <= 505; i ++)
v[i] = v[i/2] + 1;
}
int main()
{
init();
f >> n >> m;
for(i = 1; i <= n; i ++)
for(j = 1; j <= n; j ++)
f >> RMQ[0][i][j];
lg = v[n];
int maxx;
for(l = 1; l <= lg; l ++)
for(i = 1; i + (1<<(l - 1)) <= n; i ++)
for(j = 1; j + (1<<(l - 1)) <= n; j ++)
{
RMQ[l][i][j] = RMQ[l - 1][i][j];
RMQ[l][i][j] = max(RMQ[l - 1][i][j], RMQ[l - 1][i + (1<<(l - 1))][j]);
RMQ[l][i][j] = max(RMQ[l][i][j], RMQ[l - 1][i][j + (1 << (l - 1))]);
RMQ[l][i][j] = max(RMQ[l][i][j], RMQ[l - 1][i + (1 << (l - 1))][j + (1 << ( l - 1))]);
}
for(i = 0 ; i < m; i ++)
{
f >> x >> y >> k;
maxx = max(RMQ[v[k]][x][y], RMQ[v[k]][ x + k - (1<<v[k]) ][y]);
maxx = max(maxx, RMQ[v[k]][x][ y + k -(1 << v[k])]);
maxx = max(maxx, RMQ[v[k]][x + k - (1<<v[k])][y + k - (1<<v[k])] );
g << maxx << "\n";
}
f.close();
g.close();
return 0;
}