Pagini recente » Cod sursa (job #68494) | Cod sursa (job #206152) | Cod sursa (job #404154) | Cod sursa (job #2205207) | Cod sursa (job #998502)
Cod sursa(job #998502)
#include <iostream>
using namespace std;
int din[10][505][505];
int log2[505],n;
int mat[505][505];
void precalc_log()
{
int i;
log2[1]=0;
for(i=2;i<=n;i++)
log2[i]=log2[i/2]+1;
}
int maxim(int a,int b)
{
if(a>b)
return a;
return b;
}
int maxim(int a,int b,int c,int d)
{
int x=maxim(a,b);
int y=maxim(c,d);
if(x>y)
return x;
return y;
}
void precalc()
{
int i,j,k,ln=log2[n];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
din[0][i][j]=mat[i][j];
for(k=1;k<=ln;k++)
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(((i+((1<<k)-1))<n) && ((j+((1<<k)-1))<n))
din[k][i][j]=maxim(din[k-1][i][j],din[k-1][i][j+(1<<k)],din[k-1][i+(1<<k)][j],din[k-1][i+(1<<k)][j+(1<<k)]);
}
int main()
{
int i,j,m,a,b,l,lg;
cin>>n>>m;
precalc_log();
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>mat[i][j];
precalc();
for(i=0;i<m;i++)
{
cin>>a>>b>>l;
a--;
b--;
lg=log2[l];
cout<<maxim(din[lg][a][b],din[lg][a][b+l-(1<<lg)],din[lg][a+l-(1<<lg)][b],din[lg][a+l-(1<<lg)][b+l-(1<<lg)])<<'\n';
}
return 0;
}