Pagini recente » Cod sursa (job #267428) | Cod sursa (job #299640) | Cod sursa (job #968638) | Cod sursa (job #509914) | Cod sursa (job #1957718)
#include <fstream>
#include <cmath>
#include <algorithm>
using namespace std;
ifstream fi("plantatie.in");
ofstream fo("plantatie.out");
int maxim (int a,int b,int c, int d)
{
return max(max(a,b),max(c,d));
}
int rmq[501][501][10];
int N,M;
void Build()
{
int i,j,k;
for(i = 1; i <= N; ++i) for(j = 1; j <= N; ++j) fi>>rmq[i][j][0];
for(k = 1; (1<<k) <= N; ++k)
for(i = 1; i <= N-(1<<k)+1; ++i)
for(j = 1; j <= N-(1<<k)+1; ++j)
rmq [i][j][k] = maxim(rmq[i] [j] [k-1] ,
rmq[i+(1<<k-1)][j] [k-1] ,
rmq[i] [j+(1<<k-1)][k-1] ,
rmq[i+(1<<k-1)][j+(1<<k-1)][k-1] );
}
int Query(int i,int j,int k)
{
int t = log2(k);
return maxim( rmq[i] [j] [t] ,
rmq[i+k-(1<<t)][j] [t] ,
rmq[i] [j+k-(1<<t)][t] ,
rmq[i+k-(1<<t)][j+k-(1<<t)][t] );
}
int main()
{
fi>>N>>M;
Build();
while(M--)
{ int i,j,k;
fi>>i>>j>>k;
fo<<Query(i,j,k)<<'\n';
}
return 0;
}