Pagini recente » Cod sursa (job #882270) | Cod sursa (job #1964688) | Cod sursa (job #838214) | Cod sursa (job #283788) | Cod sursa (job #1697305)
#include <fstream>
using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");
int mat[502][502][10], log[502][502], n, m, lin, col, lat;
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) <=j; k++)
mat[i][j][k] = max(mat[i][j][k-1], mat[i][j - (1<<(k-1)) ][k-1]);
}
void preLog() {
for(int i=1;i<=n;i++) {
log[i][0] = 0;
for(int j=2;j<=n;j++)
log[i][j] = 1 + log[i][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 biggest, i, l, current;
for(int nr=1;nr<=m;nr++) {
in>>lin>>col>>lat;
biggest = 0;
i = lin;
for(int j=col;j<=(col+lat);j++) {
l = log[j][j-i+1];
current = max(mat[j][j][l], mat[i+ (1<<l) - 1][j][l]);
biggest = max(biggest, current);
}
out<<biggest<<"\n";
}
}
int main()
{
in>>n>>m;
read();
response();
in.close();
out.close();
return 0;
}