Pagini recente » Cod sursa (job #2735069) | Cod sursa (job #47469) | Cod sursa (job #420425) | Cod sursa (job #2571639) | Cod sursa (job #1197725)
#include <stdio.h>
#define MAXN 500
#define LOGN 8
int rmq[LOGN+1][MAXN+1][MAXN+1];
int lg[MAXN+1];
inline int max2(int a, int b){
if(a>=b){
return a;
}
return b;
}
inline int max4(int a, int b, int c, int d){
return max2(max2(a, b), max2(c, d));
}
int main(){
int n, q, i, j, l, k, iJum, jJum, add, a;
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]);
}
}
k=0;
for(i=1; i<=n; i++){
if(i>=(2<<k)){
k++;
}
lg[i]=k;
}
for(l=1; l<=lg[n]; l++){
for(i=1; i<=n; i++){
for(j=1; j<=n; j++){
if((i>(1<<(l-1)))&&(j>=(1<<(l-1)))){
iJum=i-(1<<(l-1));
jJum=j-(1<<(l-1));
rmq[l][i][j]=max4(rmq[l-1][i][j], rmq[l-1][iJum][j], rmq[l-1][i][jJum], rmq[l-1][iJum][jJum]);
}
}
}
}
for(a=1; a<=q; a++){
fscanf(fin, "%d%d%d", &i, &j, &k);
add=(1<<(lg[k]))-1;
fprintf(fout, "%d\n", max4(rmq[lg[k]][i+k-1][j+k-1], rmq[lg[k]][i+add][j], rmq[lg[k]][i][j+add], rmq[lg[k]][i+add][j+add]));
}
fclose(fin);
fclose(fout);
return 0;
}