Pagini recente » Monitorul de evaluare | Profil Ionut_info | Statistici Nastasia Alexandru (Nesteazy) | Diferente pentru home intre reviziile 184 si 902 | Cod sursa (job #3201611)
#include <fstream>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int n, m, r[10][505][505], E[505];
void BuildRmq()
{
for(int p = 1; (1<<p) <= n; p ++)
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= n; j ++)
{
int i2 = i + (1<<(p - 1));
int j2 = j + (1<<(p - 1));
r[p][i][j] = r[p - 1][i][j];
if(i2 <= n && r[p][i][j] < r[p - 1][i2][j])
r[p][i][j] = r[p - 1][i2][j];
if(j2 <= n && r[p][i][j] < r[p - 1][i][j2])
r[p][i][j] = r[p - 1][i][j2];
if(i2 <= n && j2 <= n && r[p][i][j] < r[p - 1][i2][j2])
r[p][i][j] = r[p - 1][i2][j2];
}
}
int main()
{
f >> n >> m;
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= n; j ++)
f >> r[0][i][j];
for(int i = 2; i <= n; i ++)
E[i] = 1 + E[i / 2];
BuildRmq();
for(int i = 1; i <= m; i ++)
{
int x, y, lg;
f >> x >> y >> lg;
int len = E[lg];
int i2 = x + (1<<(len - 1));
int j2 = y + (1<<(len - 1));
int maxi = max(r[len][x][y], max(r[len][x][j2],
max(r[len][i2][y], r[len][i2][j2])));
g << maxi << '\n';
}
return 0;
}