Pagini recente » Cod sursa (job #2470148) | Cod sursa (job #1501008) | Cod sursa (job #57838) | Cod sursa (job #1769604) | Cod sursa (job #1955460)
#include <fstream>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int ter[505][505], n, m, a[505][505][10];
void citire()
{
int i, j;
fin>>n>>m;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
fin>>ter[i][j];
}
int maxim(int a, int b, int c, int d)
{
return max(max(a, b), max(c, d));
}
void preprocesare()
{
int i, j, k;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
a[i][j][0]=ter[i][j];
for(k=1; (1<<k)<=n; k++)
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
a[i][j][k]=maxim(a[i][j][k-1], a[i][j+(1<<(k-1))][k-1], a[i+(1<<(k-1))][j][k-1], a[i+(1<<(k-1))][j+(1<<(k-1))][k-1]);
}
int query(int i, int j, int k)
{
int p, s;
p=0; s=1;
while(s<=k)
{
s=s*2;
p++;
}
if(s>k)
{
s=s/2;
p--;
}
return maxim(a[i][j][p], a[i][j+k-s][p], a[i+k-s][j][p], a[i+k-s][j+k-s][p]);
}
int main()
{
int i, j, k;
citire();
preprocesare();
while(m)
{
m--;
fin>>i>>j>>k;
fout<<query(i, j, k)<<'\n';
}
return 0;
}