Pagini recente » Cod sursa (job #1105185) | Cod sursa (job #1091652) | Cod sursa (job #385351) | Cod sursa (job #1112334) | Cod sursa (job #2292621)
#include <bits/stdc++.h>
using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");
int n,m,a[505][505],put[505],d[50][505][505],W;
void make_put()
{
int i;
put[1]=0;
for (i=2;i<=n;i++)put[i]=put[i/2]+1;
}
void make_d()
{int i,j,lat;
for (i=1;i<=n;i++)for (j=1;j<=n;j++)d[0][i][j]=a[i][j];
for (lat=1;lat<=W;lat++)
{
int L=1<<(lat-1);
int M=1<<lat;
for (i=1;i<=n-M+1;i++)
for (j=1;j<=n-M+1;j++)
d[lat][i][j]=max(max(d[lat-1][i][j],d[lat-1][i+L][j]),max(d[lat-1][i][j+L],d[lat-1][i+L][j+L]));
}
}
int main()
{int i,j;
in>>n>>m;
for (i=1;i<=n;i++) for (j=1;j<=n;j++)in>>a[i][j];
make_put();
W=put[n];
make_d();
int lat,y,x;
//for (i=1;i<=n;i++){for (j=1;j<=n;j++)cout<<a[i][j]<<" ";cout<<"\n";}
for (i=1;i<=m;i++)
{
in>>y>>x>>lat;
int Y=y+lat-1,X=x+lat-1;
int P=put[lat]-1;
int P2=(1<<P);
out<<max(max(d[P][y][x],d[P][Y-P2+1][x]),max(d[P][y][X-P2+1],d[P][Y-P2+1][X-P2+1]))<<"\n";
}
out.close();
in.close();
return 0;
}