Pagini recente » Cod sursa (job #2792570) | Cod sursa (job #1910096) | Cod sursa (job #39189) | Cod sursa (job #2647746) | Cod sursa (job #2336889)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
const int NMAX = 505;
const int INF = 1000000000;
int a[NMAX][NMAX];
int rmq[15][NMAX][NMAX];
int p[NMAX];
int log2(int x)
{
int p=1;
int rasp=0;
while(p<=x)
{
p*=2;
rasp++;
}
rasp--;
return rasp;
}
int main()
{
int n,m;
fin >> n >> m;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) fin >> a[i][j];
int nn=log2(n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
rmq[0][i][j]=a[i][j];
}
}
for(int k=1;k<=nn;k++)
{
for(int i=1;i<=n-(1<<k)+1;i++)
{
for(int j=1;j<=n-(1<<k)+1;j++)
{
rmq[k][i][j]=max(max(rmq[k-1][i][j],rmq[k-1][i+(1<<(k-1))][j]),max(rmq[k-1][i][j+(1<<(k-1))],rmq[k-1][i+(1<<(k-1))][j+(1<<(k-1))]));
}
}
}
for(int i=2;i<=n;i++) p[i]=p[i/2]+1;
int i,j,k;
for(int t=1;t<=m;t++)
{
fin >> i >> j >> k;
int l2=p[k];
int rasp=rmq[l2][i][j];
rasp=max(rasp,rmq[l2][i-(1<<l2)+k][j]);
rasp=max(rasp,rmq[l2][i][j-(1<<l2)+k]);
rasp=max(rasp,rmq[l2][i-(1<<l2)+k][j-(1<<l2)+k]);
fout << rasp << '\n';
}
return 0;
}