Pagini recente » Cod sursa (job #1789803) | Cod sursa (job #1955467)
#include <fstream>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int ter[505][505], n, m, a[505][505][10], log[505];
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=2; i<=500; i++)
log[i]=1+log[i/2];
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=log[k];
s=1<<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;
}