Pagini recente » Cod sursa (job #1729116) | Cod sursa (job #2672245) | Cod sursa (job #2096974) | Cod sursa (job #1664319) | Cod sursa (job #178978)
Cod sursa(job #178978)
#include <stdio.h>
#include <stdlib.h>
#define N 510
#define LOG 18
int v[N][N];
int n,m;
int rmq[LOG][N][N];
int logx[N];
int max(int a,int b){ return (a>b)?a:b; }
void logar(){
int i,x=1,y=0;
for (i=1;i<N;++i)
if (i<(x<<1))
logx[i]=y;
else{
x<<=1;
logx[i]=++y;
}
}
void pre_compute(){
int i,j,k;
for (k=1;k<=logx[n];++k)
for (i=1;i+(1<<k)<=n+1;++i)
for (j=1;j+(1<<k)<=n+1;++j)
rmq[k][i][j]=max(max(rmq[k-1][i][j],rmq[k-1][i][j+(1<<(k-1))]),
max(rmq[k-1][i+(1<<(k-1))][j],rmq[k-1][i+(1<<(k-1))][j+(1<<(k-1))]));
}
void querry(int i,int j,int c){
int L,z;
L=logx[c];
z=max ( max( rmq[L][i][j] , rmq[L][i][j+c-(1<<L)] ),
max( rmq[L][i+c-(1<<L)][j] , rmq[L][i+c-(1<<L)][j+c-(1<<L)] ) );
printf("%d\n",z);
}
int main(){
int i,j,c;
freopen("plantatie.in","r",stdin);
freopen("plantatie.out","w",stdout);
scanf("%d%d",&n,&m);
logar();
for (i=1;i<=n;++i)
for (j=1;j<=n;++j){
scanf("%d",&v[i][j]);
rmq[0][i][j]=v[i][j];
}
pre_compute();
while (m--){
scanf("%d%d%d",&i,&j,&c);
querry(i,j,c);
}
exit(0);
}