Pagini recente » Cod sursa (job #2009962) | Cod sursa (job #1309620) | Cod sursa (job #1396643) | Cod sursa (job #110845) | Cod sursa (job #1806995)
#include <fstream>
#define DIM 501
using namespace std;
int i,j,n,q,ii,x,y,k,val,nr;
int d[20][DIM][DIM],p[20],l[DIM];
ifstream fin ("plantatie.in");
ofstream fout ("plantatie.out");
int main (){
fin>>n>>q;
for (i=1;i<=n;i++){
for (j=1;j<=n;j++)
fin>>d[0][i][j];
}
//d[p][i][j] - maximul din tabloul care se termina in i j de dimensiuni 1<<p
p[0] = 1;
for (i=1;p[i-1]*2<=n;i++)
p[i] = 2*p[i-1];
l[1] = 0;
for (i=2;i<=n;i++)
l[i] = 1+l[i/2];
for (ii=1;(1<<ii)<=n;ii++){// dimensiunea
for (i=p[ii];i<=n;i++)
for (j=p[ii];j<=n;j++){
d[ii][i][j] = max (d[ii-1][i-p[ii-1]+1][j-p[ii-1]+1],d[ii-1][i-p[ii-1]+1][j]);
d[ii][i][j] = max (d[ii][i][j],d[ii-1][i][j-p[ii-1]+1]);
d[ii][i][j] = max (d[ii][i][j],d[ii-1][i][j]);
}
}
for (;q>=1;q--){
fin>>i>>j>>k;
val = l[k];
nr = max (d[val][i+(1<<val)-1][j+(1<<val)-1],d[val][i+(1<<val)-1][j+k-1]);
nr = max (nr,d[val][i+k-1][j+(1<<val)-1]);
nr = max (nr,d[val][i+k-1][j+k-1]);
fout<<nr<<"\n";
}
return 0;
}