Pagini recente » Cod sursa (job #135481) | Cod sursa (job #1548670) | Cod sursa (job #2828198) | Cod sursa (job #351806) | Cod sursa (job #1238826)
#include <stdio.h>
#define MAXN 500
#define LOG_N 8
int rmq[LOG_N+1][MAXN+1][MAXN+1], n, lg[MAXN+1];
inline int max4(int a, int b, int c, int d){
if((a>=b)&&(a>=c)&&(a>=d)){
return a;
}
if((b>=c)&&(b>=d)){
return b;
}
if(c>=d){
return c;
}
return d;
}
inline void precalc_log(){
int k, i;
k=0;
for(i=1; i<=n; i++){
if(i>=(2<<k)){
k++;
}
lg[i]=k;
}
}
inline void precalc_rmq(){
int k, i, j;
for(k=1; (1<<k)<=n; k++){
for(i=n; i>0; i--){
for(j=n; j>0; j--){
if((i+(1<<(k-1))<=n)&&(j+(1<<(k-1))<=n)){
rmq[k][i][j]=max4(rmq[k-1][i][j],rmq[k-1][i+(1<<(k-1))][j],rmq[k-1][i][j+(1<<(k-1))],rmq[k-1][i+(1<<(k-1))][j+(1<<(k-1))]);
}
}
}
}
}
int main(){
int i, j, q, k, l, Q;
FILE *fin, *fout;
fin=fopen("plantatie.in", "r");
fout=fopen("plantatie.out", "w");
fscanf(fin, "%d%d", &n, &Q);
for(i=1; i<=n; i++){
for(j=1; j<=n; j++){
fscanf(fin, "%d", &rmq[0][i][j]);
}
}
precalc_log();
precalc_rmq();
for(q=0; q<Q; q++){
fscanf(fin, "%d%d%d", &i, &j, &k);
l=lg[k];
fprintf(fout, "%d\n", max4(rmq[l][i][j], rmq[l][i+k-(1<<l)][j], rmq[l][i][j+k-(1<<l)], rmq[l][i+k-(1<<l)][j+k-(1<<l)]));
}
fclose(fin);
fclose(fout);
return 0;
}