Pagini recente » Cod sursa (job #2726090) | Cod sursa (job #3138315) | Cod sursa (job #2856672) | Cod sursa (job #2414090) | Cod sursa (job #1700575)
#include <fstream>
using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");
int mat[502][502][10], log[502], n, m;
int max(int a, int b) {
if(a > b)
return a;
return b;
}
void preMat() {
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=1; (1<<k) <=i; k++)
mat[i][j][k] = max(max(mat[i][j][k-1], mat[i][j - (1<<(k-1)) ][k-1]),
max(mat[i - (1<<(k-1)) ][j][k-1], mat[i - (1<<(k-1)) ][j - (1<<(k-1)) ][k-1]));
}
void preLog() {
for(int j=2;j<=n;j++)
log[j] = 1 + log[j/2];
}
void read() {
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
in>>mat[i][j][0];
preMat();
preLog();
}
void response() {
int i, j, lat;
for(int nr=1;nr<=m;nr++) {
in>>i>>j>>lat;
i += lat -1;
j += lat -1;
int l = log[lat];
out<<max(max(mat[i][j][l], mat[i][j - (1<<l)][l]),
max(mat[i - (1<<l)][j][l], mat[i - (1<<l)][j - (1<<l)][l]));
out<<"\n";
}
}
int main()
{
in>>n>>m;
read();
response();
in.close();
out.close();
return 0;
}