Pagini recente » Cod sursa (job #2638319) | Cod sursa (job #2090862) | Cod sursa (job #3213674) | Cod sursa (job #995645) | Cod sursa (job #1957692)
#include <fstream>
#include <cmath>
#include <algorithm>
#define NMax 500
using namespace std;
ifstream fi("plantatie.in");
ofstream fo("plantatie.out");
int rmq[10][NMax+1][NMax+1];
int v[NMax+1][NMax+1];
int N;
void Build()
{
int i,j,k;
for(i = 1; i <= N; ++i)
for(j = 1; j <= N; ++j) rmq[0][i][j] = v[i][j];
for(k = 1; (1<<k) <= N; ++k)
for(i = 1; i <= N-(1<<k)+1; ++i)
for(j = 1; j <= N-(1<<k)+1; ++j)
{
rmq[k][i][j] = rmq[k-1][i][j];
rmq[k][i][j] = max( rmq[k][i][j], rmq[k-1][i+(1<<k-1)][j] );
rmq[k][i][j] = max( rmq[k][i][j], rmq[k-1][i][j+(1<<k-1)] );
rmq[k][i][j] = max( rmq[k][i][j], rmq[k-1][i+(1<<k-1)][j+(1<<k-1)] );
}
}
int main()
{
int i,j,k,t,res,M;
fi>>N>>M;
for(i = 1; i <= N; ++i)
for(j = 1; j <= N; ++j) fi>>v[i][j];
Build();
while(M--)
{
fi>>i>>j>>k;
t = log2(k);
res = rmq[t][i][j];
res = max( res, rmq[t][i+k-(1<<t)][j] );
res = max( res, rmq[t][i][j+k-(1<<t)] );
res = max( res, rmq[t][i+k-(1<<t)][j+k-(1<<t)] );
fo<<res<<'\n';
}
return 0;
}