Pagini recente » Cod sursa (job #2305081) | Cod sursa (job #2608350) | Cod sursa (job #3270383) | Cod sursa (job #3801) | Cod sursa (job #3277634)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
const int MAX=500;
int n,r[10][MAX+5][MAX+5],v[MAX+5][MAX+5],i,j,E[MAX+5],lat,q;
void rmq2d()
{
int p;
E[1]=0;
for (i=2; i<=n; i++)
E[i]=1+E[i/2];
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
r[0][i][j]=v[i][j];
for (p=1; (1<<p)<=n; p++)
{
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
{
r[p][i][j]=r[p-1][i][j];
if (j+(1<<(p-1))<=n && i+(1<<(p-1))<=n)
{
r[p][i][j]=max(r[p][i][j],r[p-1][i+(1<<(p-1))][j+(1<<(p-1))]);
r[p][i][j]=max(r[p][i][j],r[p-1][i][j+(1<<(p-1))]);
r[p][i][j]=max(r[p][i][j],r[p-1][i+(1<<(p-1))][j]);
}
}
}
}
void query(int i, int j, int lat)
{
int e=E[lat],len=(1<<e);
fout<<max( max(r[e][i][j],r[e][i+lat-len][j]), max(r[e][i+lat-len][j+lat-len], r[e][i][j+lat-len]) )<<"\n";
}
int main()
{
fin>>n>>q;
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
fin>>v[i][j];
rmq2d();
while (q)
{
fin>>i>>j>>lat;
query(i,j,lat);
q--;
}
return 0;
}