Pagini recente » Cod sursa (job #257385) | Cod sursa (job #1987159) | Cod sursa (job #152602) | Cod sursa (job #1945076) | Cod sursa (job #2772614)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int n, q;
int rmq[503][503][9];
void citire()
{
int i, j;
fin >> n >> q;
for(i = 1; i <= n; i++)
for(j = 1; j <= n; j++)
fin >> rmq[i][j][0];
}
void matrice()
{
int i, j, k, lungime;
for(k = 1; (1 << k) <= n; k++)
for(i = 1; i <= n - (1 << k) + 1; i++)
for(j = 1; j <= n - (1 << k) + 1; j++)
{
lungime = 1 << (k - 1);
rmq[i][j][k] = max( rmq[i][j][k - 1], max(
rmq[i + lungime][j][k - 1], max(
rmq[i][j + lungime][k - 1],
rmq[i + lungime][j + lungime][k - 1] )));
}
}
int logaritm2(int x)
{
int i;
for(i = 0; 1 << i <= x; i++) ;
return (i - 1);
}
void rezolvare()
{
int i, j, k, sol, lglat, putere2;
for(;q--;)
{
fin >> i >> j >> k;
lglat = logaritm2(k);
putere2 = 1 << lglat;
sol = max( rmq[i][j][lglat], max(
rmq[i + k - putere2][j][lglat], max(
rmq[i][j + k - putere2][lglat],
rmq[i + k - putere2][j + k - putere2][lglat]
)));
fout << sol << "\n";
}
}
int main()
{
citire();
matrice();
rezolvare();
fin.close();
fout.close();
return 0;
}