Pagini recente » Cod sursa (job #2247856) | Cod sursa (job #2864964) | Cod sursa (job #1306585) | Cod sursa (job #3250840) | Cod sursa (job #1723684)
#include <cstdio>
#define MAXN 500
#define MAXLOG 9
int rmq[MAXN+1][MAXN+1][MAXLOG+1],pow[MAXN+1];
inline int getmax(int a,int b){
if(a>b)
return a;
return b;
}
int main(){
FILE*fi,*fout;
int i,j,n,m,l,c,a,b,k,p2;
fi=fopen("plantatie.in" ,"r");
fout=fopen("plantatie.out" ,"w");
fscanf(fi,"%d %d " ,&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
fscanf(fi,"%d" ,&rmq[i][j][0]);
pow[1]=0;
p2=1;
for(i=2;i<=n;i++){
if(i>=p2*2){
pow[i]=pow[i-1]+1;
p2*=2;
}
else
pow[i]=pow[i-1];
}
for(i=1;(1<<i)<=n+1;i++)
for(l=1;l+(1<<i)<=n+1;l++)
for(c=1;c+(1<<i)<=n+1;c++){
a=getmax(rmq[l][c][i-1],rmq[l][c+(1<<(i-1))][i-1]);
b=getmax(rmq[l+(1<<(i-1))][c][i-1],rmq[l+(1<<(i-1))][c+(1<<(i-1))][i-1]);
rmq[l][c][i]=getmax(a,b);
}
while(m>0){
m--;
fscanf(fi,"%d %d %d" ,&l,&c,&k);
a=getmax(rmq[l][c][pow[k]],rmq[l][c+k-(1<<pow[k])][pow[k]]);
b=getmax(rmq[l+k-(1<<pow[k])][c][pow[k]],rmq[l+k-(1<<pow[k])][c+k-(1<<pow[k])][pow[k]]);
fprintf(fout,"%d\n" ,getmax(a,b));
}
fclose(fi);
fclose(fout);
return 0;
}