Pagini recente » Cod sursa (job #2186494) | Cod sursa (job #1535466) | Cod sursa (job #3181921) | Cod sursa (job #1523681) | Cod sursa (job #2752467)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int n,m;
int squares[501][501][9];
void init()
{
int i,j,k,p=2;
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
f>>squares[i][j][0];
///init; split square in 4;
for(k=1; k<9 && p<=n ; ++k, p = p<<1)
{
for(i=1;i<=n-p+1; ++i)
for(j=1; j<=n-p+1;++j)
{
squares[i][j][k] = max( max(squares[i][j][k-1], squares[i+(p>>1)][j][k-1] ), max( squares[i][j+(p>>1)][k-1], squares[i+(p>>1)][j+(p>>1)][k-1]));
}
}
}
int query(int i, int j, int k)
{
int p=256, power=8; ///1<<8 ; n max = 500 < 1<<9
while(p>k)
{
p = p>>1;
--power;
}
if(p==k)
{
return squares[i][j][power];
}
else
return max( max(squares[i][j][power], squares[i+k- p][j][power] ), max( squares[i][j+k-p][power], squares[i+k-p][j+k-p][power]));
}
int main()
{
int i;
int x,y,k;
f>>n>>m;
init();
for(i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
g<<squares[i][j][3]<<' ';
g<<'\n';
}
for(i=1;i<=m;++i)
{
f>>x>>y>>k;
g<<query(x,y,k)<<'\n';
}
return 0;
}