Nu aveti permisiuni pentru a descarca fisierul grader_test2.in
Cod sursa(job #250498)
| Utilizator | Data | 31 ianuarie 2009 00:02:37 | |
|---|---|---|---|
| Problema | Plantatie | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.96 kb |
//cu masiv si RMQ
#include<stdio.h>
#define NM 256+513
int b[10][NM][NM];
int a[NM][NM];
int main(){
freopen("plantatie.in","r",stdin);
freopen("plantatie.out","w",stdout);
int n,m,i,j,k,l,c,lat,pmax,p,x,t;
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)
for(j=1;j<=n;++j){
scanf("%d",&a[i][j]);
b[0][i][j]=a[i][j];
}
k=0;p=1;
while(p<n) k++,p*=2;
x=k;p=1;
for(k=1;k<=x;++k){
for(i=1;i<=n;++i)
for(j=1;j<=n;++j){
pmax=b[k-1][i][j];
if(pmax<b[k-1][i+p][j+p]) pmax=b[k-1][i+p][j+p];
if(pmax<b[k-1][i+p][j]) pmax=b[k-1][i+p][j];
if(pmax<b[k-1][i][j+p]) pmax=b[k-1][i][j+p];
b[k][i][j]=pmax;
}
p*=2;
}
for(t=0;t<m;++t){
scanf("%d%d%d",&l,&c,&lat);
p=1;k=0;
while(p<lat) k++,p*=2;
if(p>lat) p/=2,k--;
pmax=b[k][l][c];
if(pmax<b[k][l][c+lat-p]) pmax=b[k][l][c+lat-p];
if(pmax<b[k][l+lat-p][c]) pmax=b[k][l+lat-p][c];
if(pmax<b[k][l+lat-p][c+lat-p]) pmax=b[k][l+lat-p][c+lat-p];
printf("%d\n",pmax);
}
return 0;
}
