Pagini recente » Cod sursa (job #1182448) | Cod sursa (job #1848748) | Cod sursa (job #2794656) | Cod sursa (job #388832) | Cod sursa (job #1521175)
#include <iostream>
#include <fstream>
#include <sstream>
#define maxN 501
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
std::stringstream buffer;
int n,m,i,j,k;
int lg[maxN], rmq[9][501][501];
inline int maxim(int a, int b)
{
return (a>b) ? a:b;
}
void create_lg()
{
for (i=2; i<=n; ++i)
lg[i]=lg[i>>1]+1;
}
int main()
{
fin>>n>>m;
create_lg();
for (i=1; i<=n; ++i)
for (j=1; j<=n; ++j)
fin>>rmq[0][i][j];
for (k=1; k<=lg[n]; ++k)
for (i=1; i<=n; ++i)
for (j=1; j<=n; ++j)
{
rmq[k][i][j]=rmq[k-1][i][j];
if (i+(1<<(k-1))<=n) rmq[k][i][j]=maxim(rmq[k][i][j], rmq[k-1][i+(1<<(k-1))][j]);
if (j+(1<<(k-1))<=n) rmq[k][i][j]=maxim(rmq[k][i][j], rmq[k-1][i][j+(1<<(k-1))]);
if (i+(1<<(k-1))<=n) rmq[k][i][j]=maxim(rmq[k][i][j], rmq[k-1][i+(1<<(k-1))][j+(1<<(k-1))]);
}
while (m)
{
fin>>i>>j>>k;
int line=lg[k];
int res=rmq[line][i][j];
res=maxim(res, rmq[line][i+k-(1<<line)][j]);
res=maxim(res, rmq[line][i][j+k-+(1<<line)]);
res=maxim(res, rmq[line][i+k-(1<<line)][j+k-(1<<line)]);
fout<<res<<'\n';
--m;
}
return 0;
}