Pagini recente » Cod sursa (job #1811992) | Cod sursa (job #2557210) | Cod sursa (job #1976850) | Cod sursa (job #1132156) | Cod sursa (job #971582)
Cod sursa(job #971582)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int n,m,a[505][505],lg[505],mn[505][505][19];
void Read()
{ int i,j;
f>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f>>a[i][j];
}
void Process()
{ int i,j,lim,log;
for(i=2;i<=n;i++)
lg[i]=lg[i/2]+1;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
mn[i][j][0]=a[i][j];
for(log=1;(1<<log)<=n;log++)
{ lim=n-(1<<log)+1;
for(i=1;i<=lim;i++)
for(j=1;j<=lim;j++)
{ mn[i][j][log]=max(mn[i][j][log-1],mn[i][j+(1<<(log-1))][log-1]);
mn[i][j][log]=max(mn[i][j][log],mn[i+(1<<(log-1))][j][log-1]);
mn[i][j][log]=max(mn[i][j][log],mn[i+(1<<(log-1))][j+(1<<(log-1))][log-1]);
}
}
}
void Solve()
{ int i,j,l,lat,x,y,sol;
for(i=1;i<=m;i++)
{ f>>x>>y>>lat;
l=lg[lat]; //g<<l<<"\n";
sol=max(mn[x][y][l],mn[x+lat-1-(1<<l)+1][y][l]);
sol=max(sol,mn[i][y+lat-1-(1<<l)+1][l]);
sol=max(sol,mn[x+lat-1-(1<<l)+1][y+lat-1-(1<<l)+1][l]);
g<<sol<<"\n";
}
//cout<<mn[1][1][3];
}
int main()
{ Read();
Process();
Solve();
return 0;
}