Pagini recente » Cod sursa (job #2614668) | Cod sursa (job #2309865) | Cod sursa (job #1552239) | Cod sursa (job #1417290) | Cod sursa (job #360886)
Cod sursa(job #360886)
#include <stdio.h>
#define Nmax 513
#define NNmax 1003
#define Mmax 75001
#define Logmax 10
int m[NNmax][NNmax][Logmax]; // m[i][j][k] = elem max din patrat cu colt st. sus i,j si lg lat 2^k
int a[Nmax][Nmax],lg[Nmax];
int n,mm,i,j,k,q,nk,p,sol;
int max(int x,int y){ return x>y ? x:y; }
int main(){
freopen("plantatie.in","r",stdin);
freopen("plantatie.out","w",stdout);
scanf("%d%d",&n,&mm);
for(i=1;i<=n;++i)
for(j=1;j<=n;++j) scanf("%d",&a[i][j]);
for(nk=0; (1<<nk) < Nmax; nk++) lg[(1<<nk)]=nk;
for(i=1;i<Nmax;++i)
if(!lg[i]) lg[i]=lg[i-1];
nk=lg[n];
// initializez
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
m[i][j][0] = a[i][j];
for(k=1; k<=nk; ++k)
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
m[i][j][k] = max( max(m[i][j][k-1], m[i+(1<<(k-1))][j+(1<<(k-1))][k-1]),
max(m[i][j+(1<<(k-1))][k-1], m[i+(1<<(k-1))][j][k-1]) );
for(q=1;q<=mm;++q){
scanf("%d%d%d",&i,&j,&k);
p = lg[k];
sol = max( max(m[i][j][p], m[i+k-(1<<p)][j+k-(1<<p)][p]),
max(m[i+k-(1<<p)][j][p], m[i][j+k-(1<<p)][p]) );
printf("%d\n",sol);
}
fclose(stdin); fclose(stdout);
return 0;
}