Pagini recente » Cod sursa (job #418765) | Cod sursa (job #2054644) | Cod sursa (job #693524) | Diferente pentru implica-te/arhiva-educationala intre reviziile 223 si 86 | Cod sursa (job #2904390)
#include<iostream>
#include<fstream>
using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");
int n,m,x[502][502],lg2[502],rmq[10][502][502],xx,y,l;
inline int interogare(int x, int y, int lat)
{
int l = lg2[lat],smax = 0;
smax = max(rmq[l][x][y], rmq[l][x - (1<<l) + lat][y]);
if(max(rmq[l][x][y - (1<<l) + lat], rmq[l][x - (1<<l) + lat][y - (1<<l) + lat]) > smax) smax = max(rmq[l][x][y - (1<<l) + lat], rmq[l][x - (1<<l) + lat][y - (1<<l) + lat]);
return smax;
}
int main()
{
in>>n>>m;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
{
in>>x[i][j];
rmq[0][i][j] = x[i][j];
}
lg2[1] = 0;
for(int i = 2; i <= n; ++i) lg2[i] = lg2[i>>1]+1;
for(int k = 1; (1<<k)<=n; ++k)
for(int i = 1; i <= n - (1<<k) + 1; ++i)
for(int j=1; j <= n - (1<<k) + 1; ++j)
{
l = 1<<(k-1);
rmq[k][i][j] = max(rmq[k-1][i][j], rmq[k-1][i+l][j]);
if(max(rmq[k-1][i][j+l], rmq[k-1][i+l][j+l]) > rmq[k][i][j]) rmq[k][i][j] = max(rmq[k-1][i][j+l], rmq[k-1][i+l][j+l]);
}
for(int i = 1; i <= m; ++i)
{
in>>xx>>y>>l;
out<<interogare(xx,y,l)<<"\n";
}
return 0;
}