Pagini recente » Istoria paginii runda/lol_contest_02/clasament | Istoria paginii runda/itmarathon/clasament | Cod sursa (job #2181567) | Istoria paginii runda/antrenament | Cod sursa (job #1566507)
#include<fstream>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int n,m,D[10][505][505],x1,y1,P[505],x2,y2,z,k;
int main(){
fin >> n >> m;
for( int i = 1; i <= n; i++ ){
for( int j = 1 ;j <= n; j++ ){
fin >> D[0][i][j];
}
}
for( int k = 1; (1<<k) <= n; k++ ){
for( int i = 1; i <= n; i++ ){
for( int j = 1; j <= n; j++ ){
D[k][i][j] = D[k-1][i][j];
if( i + (1<<(k-1)) <= n ){
D[k][i][j] =max( D[k][i][j], D[k-1][i + (1<<(k-1))][j] );
}
if( j + (1<<(k-1)) <= n ){
D[k][i][j] =max( D[k][i][j], D[k-1][i][j + (1<<(k-1))] );
}
if( i + (1<<(k-1)) <= n && j + (1<<(k-1)) <= n ){
D[k][i][j] =max( D[k][i][j], D[k-1][i + (1<<(k-1))][j + (1<<(k-1))] );
}
}
}
}
for( int i = 2; i <= n; i++ ){
P[i] = P[i/2] + 1;
}
for( ; m != 0; m-- ){
fin >> x1 >> y1 >> z;
x2 = x1 + z - 1;
y2 = y1 + z - 1;
k = P[z];
fout << max( D[k][x1][y1],max( D[k][x2 - (1<<k) + 1][y1],max( D[k][x1][y2 - (1<<k) + 1], D[k][x2 - (1<<k) + 1][y2 - (1<<k) + 1] ) ) ) << "\n";
}
return 0;
}