Pagini recente » Cod sursa (job #1052821) | Cod sursa (job #2792658) | Cod sursa (job #2626229) | Cod sursa (job #244365) | Cod sursa (job #2766787)
#include <bits/stdc++.h>
#define nmax 502
using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");
int rmq[nmax][nmax][10],n,lg[nmax],m;
void runLog()
{
lg[1]=0;
for(int i=2;i<nmax;i++)
{
lg[i]=lg[i/2]+1;
}
}
void runRmq()
{
for(int k=1;(1<<k)<=n;k++)
{
for(int i=1;i<=n-(1<<k)+1;i++)
{
for(int j=1;j<=n-(1<<k)+1;j++)
{
int dif=1<<(k-1);
rmq[i][j][k]=max(max(rmq[i][j][k-1],rmq[i][j+dif][k-1]),
max(rmq[i+dif][j][k-1],rmq[i+dif][j+dif][k-1]));
//out<<rmq[i][j][k]<<' ';
}
//out<<'\n';
}
//out<<'\n';
}
}
int getMax(int a,int b,int k)
{
int l=lg[k];
int dif=k-(1<<l);
return max(max(rmq[a][b][l],rmq[a][b+dif][l]),
max(rmq[a+dif][b][l],rmq[a+dif][b+dif][l]));
}
int main()
{
in>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
in>>rmq[i][j][0];
}
}
runLog();
runRmq();
for(int i=0;i<m;i++)
{
int a,b,k;
in>>a>>b>>k;
out<<getMax(a,b,k)<<'\n';
}
return 0;
}