Pagini recente » Cod sursa (job #264516) | Cod sursa (job #2857595) | Cod sursa (job #2970033) | Cod sursa (job #32766) | Cod sursa (job #2791172)
#include <fstream>
#define K 510
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][20]; //maximul din patratul de latura 2^k cu i,j stanga sus
int maxim(int a, int b, int c, int d){return max(max(a,b), max(c,d));}
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]=maxim(d[i][j][k-1],d[i+lat][j][k-1],
d[i][j+lat][k-1],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=maxim(d[i][j][expn], d[i+k-lat][j][expn],d[i][j+k-lat][expn],d[i+k-lat][j+k-lat][expn]);
fout<<sol<<"\n";
}
return 0;
}