Pagini recente » Cod sursa (job #3218196) | Cod sursa (job #2008801) | Cod sursa (job #412374) | Cod sursa (job #3173327) | Cod sursa (job #1700584)
#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;
int l = log[lat];
out<<max(max(mat[i +lat -1][j + lat -1][l], mat[i + lat -1][j + (1<<l)-1][l]),
max(mat[i + (1<<l) -1][j + lat -1][l], mat[i + (1<<l) -1][j + (1<<l) -1][l]));
out<<"\n";
}
}
int main()
{
in>>n>>m;
read();
response();
in.close();
out.close();
return 0;
}