Pagini recente » Cod sursa (job #2471790) | Cod sursa (job #1630334) | Cod sursa (job #1749818) | Cod sursa (job #1539393) | Cod sursa (job #2791168)
#include <fstream>
#define K 505
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int n,i,j,x,y,k,q,sol,lg[K];//exp celei mai apropiate puteri de 2 <=i
int d[K][K][10]; //maximul din patratul de latura 2^k cu i,j stanga sus
int main(){
fin>>n>>q;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
fin>>d[i][j][0];
for(k=1;(1<<k)<=n;k++){
int lat=(1<<(k-1));
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){
d[i][j][k]=max(d[i][j][k-1],d[i+lat][j][k-1]);
d[i][j][k]=max(d[i][j][k], d[i][j+lat][k-1]);
d[i][j][k]=max(d[i][j][k], d[i+lat][j+lat][k-1]);
}
}//impart patratul de latura 2^k in 4 patrate de lat 2^(k-1)
for(i=2;i<=n;i++)
lg[i]=lg[i/2]+1;
for(;q--;){
fin>>i>>j>>k;
int expn=lg[k];
int lat=(1<<expn);
// patratul de lat k e acoperit de 4 patrate de lat 2^expn
sol=max(d[i][j][expn], d[i+k-lat][j][expn]);
sol=max(sol, d[i][j+k-lat][expn]);
sol=max(sol, d[i+k-lat][j+k-lat][expn]);
fout<<sol<<"\n";
}
return 0;
}