Pagini recente » Cod sursa (job #1490165) | Cod sursa (job #214320) | Cod sursa (job #954147) | Cod sursa (job #192133) | Cod sursa (job #1446304)
#include<fstream>
using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");
const int NMAX = 505;
const int LMAX = 10;
int R[NMAX][NMAX][LMAX],n,m,lg[NMAX];
void read()
{
in>>n>>m;
int x;
for(int i = 1 ; i <= n ; ++i)
for(int j = 1 ; j <= n ; ++j){
in>>x;
R[i][j][0] = x;
}
}
void RMQ()
{
lg[1] = 0;
for(int i = 2 ; i <= n ; ++i)
lg[i] = lg[i/2] + 1;
for(int k = 1 ; k <= lg[n] ; ++k)
for(int i = 1 ; n - (1 << k) + 1 >= i ; ++i )
for(int j = 1 ; n - (1 << k) + 1 >= j ; ++j)
R[i][j][k] = max(max(R[i][j][k-1],R[i + (1 << (k-1))][j][k-1]),max(R[i][j + (1 << (k-1))][k-1],R[i + (1 << (k-1))][j + (1 << (k-1))][k-1]));
}
int solve(int x,int y,int k)
{
int len = lg[k];
int dif = k - (1 << len);
return max(max(R[x][y][len],R[x + dif][y + dif][len]),max(R[x+dif][y][len],R[x][y + dif][len]));
}
int main()
{
read();
RMQ();
int a,b,c;
for( ; m ; --m){
in>>a>>b>>c;
out<<solve(a,b,c)<<"\n";
}
return 0;
}