Pagini recente » Cod sursa (job #2485722) | Cod sursa (job #1418184) | Cod sursa (job #2567926) | Cod sursa (job #2812042) | Cod sursa (job #836716)
Cod sursa(job #836716)
#include <fstream>
#include <iostream>
#include <cstdlib>
#define MAX_SIZE 501
using namespace std;
int matr[10][MAX_SIZE][MAX_SIZE];
int N , M;
int log[MAX_SIZE];
int query( int x , int y , int edge)
{
int lg = log[edge];
int maxim = -1;
int dif = edge - (1 << lg);
if (maxim < matr[lg][x][y])
{
maxim = matr[lg][x][y];
}
if (maxim < matr[lg][x][y+dif])
{
maxim = matr[lg][x][y+dif];
}
if (maxim < matr[lg][x+dif][y])
{
maxim = matr[lg][x+dif][y];
}
if (maxim < matr[lg][x+dif][y+dif])
{
maxim = matr[lg][x+dif][y+dif];
}
return maxim;
}
void pre()
{
log[1] = 0;
for (int i = 2 ;i <= N;i++)
{
log[i] = log[ i >> 1] + 1;
}
for (int k = 1;k <= log[N];k++)
for (int i = 1;i<= N - (1 << k) +1;i++)
for (int j = 1;j<= N - (1 << k) +1;j++)
{
int maxim = -1;
int l = ( 1 << (k-1));
if (maxim < matr[k-1][i][j])
{
maxim = matr[k-1][i][j];
}
if (maxim < matr[k-1][i][j+l])
{
maxim = matr[k-1][i][j+l];
}
if (maxim < matr[k-1][i+l][j])
{
maxim = matr[k-1][i+l][j];
}
if (maxim < matr[k-1][i+l][j+l])
{
maxim = matr[k-1][i+l][j+l];
}
matr[k][i][j] = maxim;
}
}
int main()
{
ifstream input("plantatie.in");
ofstream output("plantatie.out");
input >> N >> M;
for (int i = 1 ;i <= N;i++)
for (int j = 1; j <= N;j++)
{
input >> matr[0][i][j];
}
pre();
for (int i =0;i<M;i++)
{
int x , y , h;
input >> x >> y >> h;
output << query(x,y,h) << "\n";
}
input.close();
output.close();
return 0;
}