Pagini recente » Cod sursa (job #2910009) | Cod sursa (job #1513298) | Cod sursa (job #2784693) | Cod sursa (job #1541464) | Cod sursa (job #812159)
Cod sursa(job #812159)
#include <fstream>
#include <stdlib.h>
#include <algorithm>
#include <math.h>
using namespace std;
ifstream fi ("plantatie.in");
ofstream fo ("plantatie.out");
const int dim = 502;
int N, M, P[dim], B[dim][dim][9];
void prepr ()
{
int i, j, k, p, p1;
fi >> N >> M;
for (i = 1; i <= N; i++)
{
for (j = 1; j <= N; j++)
fi >> B[i][j][0];
if (i > 1)
P[i] = P[i>>1] + 1;
}
for (k = 1; 1<<k <= N; k++)
{
p = 1 << k-1;
p1 = (1<<k) - 1;
for (i = 1; i+p1 <= N; i++)
for (j = 1; j+p1 <= N; j++)
{
B[i][j][k] = max
(
max (B[i][j][k-1], B[i+p][j+p][k-1]),
max (B[i+p][j][k-1], B[i][j+p][k-1])
);
}
}
}
int query (int i, int j, int k)
{
//c = latura celui mai mare patrat de latime 2^ceva din interior
//r = restul pana la patratul de latime k
int b = P[k];
int c = 1 << b;
int r = k - c;
return max
(
max (B[i][j][b], B[i+r][j+r][b]),
max (B[i+r][j][b], B[i][j+r][b])
);
}
int main ()
{
int i, j, k;
prepr ();
while (M--)
{
fi >> i >> j >> k;
fo << query (i, j, k) << '\n';
}
return 0;
}