Pagini recente » Cod sursa (job #2888911) | Cod sursa (job #3294193) | Cod sursa (job #2701610) | Cod sursa (job #465212) | Cod sursa (job #1080626)
#include <fstream>
using namespace std;
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
const int n_max=501;
const int log_n_max=9;
int n, m, i, j, k, rm[n_max][n_max][log_n_max];
int maxim(int i, int j, int k)
{
int mx;
mx=rm[i][j][k-1];
if(rm[i+(1<<(k-1))][j][k-1] > mx)
mx=rm[i+(1<<(k-1))][j][k-1];
if(rm[i][j+(1<<(k-1))][k-1] > mx)
mx=rm[i][j+(1<<(k-1))][k-1];
if(rm[i+(1<<(k-1))][j+(1<<(k-1))][k-1] > mx)
mx=rm[i+(1<<(k-1))][j+(1<<(k-1))][k-1];
return mx;
}
void RMQ()
{
int i, j, k;
for(k=1; (1<<k)<=n; k++)
for(i=1; i+(1<<k)-1<=n; i++)
for(j=1; j+(1<<k)-1<=n; j++)
rm[i][j][k]=maxim(i, j, k);
}
int query(int i, int j, int k)
{
int log=1, mx;
while((1<<log)<=k)
log++;
log--;
mx=rm[i][j][log];
if(rm[i+k-(1<<log)][j][log] > mx)
mx=rm[i+k-(1<<log)][j][log];
if(rm[i][j+k-(1<<log)][log] > mx)
mx=rm[i][j+k-(1<<log)][log];
if(rm[i+k-(1<<log)][j+k-(1<<log)][log] > mx)
mx=rm[i+k-(1<<log)][j+k-(1<<log)][log];
return mx;
}
int main()
{
cin>>n>>m;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
cin>>rm[i][j][0];
RMQ();
while(m--)
{
cin>>i>>j>>k;
cout<<query(i, j, k)<<'\n';
}
return 0;
}