Pagini recente » Cod sursa (job #1889257) | Cod sursa (job #1977754) | Cod sursa (job #1432837) | Cod sursa (job #1286767) | Cod sursa (job #1486369)
#include <bits/stdc++.h>
using namespace std;
int p2[505], a[505][505], rmq[10][505][505], n;
/// rmq[i,j,k]=maximul pe patratul avand coltul stanga-sus in (j,k)
/// si latura de lungime 2^i
/// p2[i] = k : 2^k <= i si k e maxim
void Puteri2()
{
int i;
p2[1] = 0;
for (i = 2; i <= 500; i++)
p2[i] = 1 + p2[i / 2];
}
inline int Max(int x, int y, int z, int w)
{
return max(max(x, y), max(z, w));
}
void RMQ()
{
int i, j, k, L, len;
for (k = 1; k <= p2[n]; k++)
{
L = (1 << k);
len = 1 << (k - 1);
for (i = 1; i <= n - L + 1; i++)
for (j = 1; j <= n - L + 1; j++)
rmq[k][i][j] = Max(rmq[k-1][i][j],rmq[k-1][i+len][j],
rmq[k-1][i][j+len],rmq[k-1][i+len][j+len]);
}
}
void CitireAfisare()
{
int i, j, Q, k, q, sol, L, len;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
fin >> n >> Q;
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
fin >> rmq[0][i][j];
RMQ();
for (q = 1; q <= Q; q++)
{
fin >> i >> j >> k;
len = p2[k]; L = 1 << len;
sol = Max(rmq[len][i][j],rmq[len][i+k-L][j+k-L],
rmq[len][i+k-L][j],rmq[len][i][j+k-L]);
fout << sol << "\n";
}
fin.close();
fout.close();
}
int main()
{
Puteri2();
CitireAfisare();
return 0;
}