Pagini recente » Cod sursa (job #2758667) | Cod sursa (job #251830) | Cod sursa (job #489658) | Cod sursa (job #33701) | Cod sursa (job #29224)
Cod sursa(job #29224)
#include<fstream.h>
#define nmax 602
int long max[nmax][nmax][20],n,a[nmax][nmax];
inline int long maxim(int long a,int long b) {return a>b?a:b;}
void init_max()
{int long i,k,j,jj;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
max[i][j][0]=a[i][j];
for(i=1;(1<<i)<=n;i++)
for(j=1;j<=n;j++)
for(jj=1;jj<=n;jj++)
{max[j][jj][i]=max[j][jj][i-1];
if(max[j][jj+(1<<(i-1))][i-1]>max[j][jj][i])
max[j][jj][i]=max[j][jj+(1<<(i-1))][i-1];
if(max[j][jj][i]<max[j+(1<<(i-1))][jj][i-1])
max[j][jj][i]=max[j+(1<<(i-1))][jj][i-1];
if(max[j][jj][i]<max[j+(1<<(i-1))][jj+(1<<(i-1))][i-1])
max[j][jj][i]=max[j+(1<<(i-1))][jj+(1<<(i-1))][i-1];
}
}
int long rezolva(int long x,int long y,int long k)
{int long r,j=15;
for(;j>=0;j--)
if(k&(1<<j))
break;
r=k-(1<<j);
return maxim(maxim(max[x][y][j],max[x+r][y+r][j]),maxim(max[x+r][y][j],max[x][y+r][j]));
}
int main()
{ifstream f("plantatie.in");
int long m,i,j,x,y,z;
f>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f>>a[i][j];
init_max();
ofstream g("plantatie.out");
for(i=1;i<=m;i++)
{f>>x>>y>>z;
g<<rezolva(x,y,z)<<"\n";
}
g.close();
return 0;
}