Pagini recente » Autentificare | Cod sursa (job #1580445) | Cod sursa (job #1647598) | Arbori de intervale si aplicatii in geometria computationala | Cod sursa (job #1685787)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");
const int N = 503;
int n, m, r[N][N][13], log[N];
int maxi( int x, int y )
{
if ( x > y )
return x;
else return y;
}
int max ( int x, int y, int z, int t )
{
return maxi( maxi(x, y), maxi(z, t) );
/*if ( x >= y && x >= z && x >= y )
return x;
if ( y >= x && y >= z && y >= t )
return y;
if ( z >= x && z >= y && z >= t )
return z;
return t;*/
}
int main()
{
int i, j, k, p, x, y, a, b;
in >> n >> m;
for ( i = 1; i <= n; i++ )
for ( j = 1; j <= n; j++ )
{
in >> r[i][j][0];
}
log[1] = 0;
for ( i = 2; i <= n; i++ )
log[i] = log[i/2]+1;
for ( i = 1; i <= n; i++ )
{
for ( j = 1; j <= n; j++ )
{
for ( k = 1; (1 << k) <= i && (1<<k) <= j; k++ )
{
p = 1<<(k-1);
r[i][j][k] = max( r[i][j][k-1], r[i-p][j][k-1], r[i][j-p][k-1], r[i-p][j-p][k-1] );
}
}
}
/*for ( i = 1; i <= n; i++ )
{
for ( j = 1; j <= n; j++ )
out << r[i][j][3]<<' ';
out <<'\n';
}*/
for ( i = 1; i <= m; i++ )
{
in >> a >> b >> k;
p = log[k];
x = a + k - 1;
y = b + k - 1;
j = max( r[x][y][p] , r[x][ b-1+(1<<p) ][p], r[ a-1+(1<<p) ][y][p], r[ a-1+(1<<p) ][ b-1+(1<<p) ][p]);
out<<j<<'\n';
}
return 0;
}