Pagini recente » Cod sursa (job #1473154) | Cod sursa (job #3131291) | Cod sursa (job #2967629) | Cod sursa (job #1421674) | Cod sursa (job #676862)
Cod sursa(job #676862)
#include <cstdio>
using namespace std;
const int nmax=505;
int a[nmax][nmax],m[10][nmax][nmax],lg[nmax],n;
inline int max(int x,int y)
{ if(x>y)return x; else return y; return 0; }
void rmq()
{ int i,j,k,nr,x,y;
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
m[0][i][j]=a[i][j];
lg[1]=0; for(i=2;i<=n;++i) lg[i]=lg[i>>1]+1;
for(k=1;(1<<k)<=n;++k)
for(i=1;i<=n-(1<<k)+1;++i)
for(j=1;j<=n-(1<<k)+1;++j)
{
nr=(1<<(k-1));
x=max(m[k-1][i][j],m[k-1][i+nr][j]);
y=max(m[k-1][i][j+nr],m[k-1][i+nr][j+nr]);
m[k][i][j]=max(x,y);
}
}
int main()
{ int i,x,y,k,mi,j,z,q,xf,yf;
freopen("plantatie.out","w",stdout);
freopen("plantatie.in","r",stdin); scanf("%d %d\n",&n,&mi);
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
scanf("%d ",&a[i][j]);
rmq();
for(i=1;i<=mi;++i)
{
scanf("%d %d %d\n",&x,&y,&k);
xf=x+k-1; yf=y+k-1;
z=max(m[lg[k]][x][y],m[lg[k]][x][yf-(1<<lg[k])+1]);
q=max(m[lg[k]][xf-(1<<lg[k])+1][y],m[lg[k]][xf-(1<<lg[k])+1][yf-(1<<lg[k])+1]);
printf("%d\n",max(z,q));
}
fclose(stdin);
fclose(stdout);
return 0;
}