Pagini recente » Cod sursa (job #2327848) | Cod sursa (job #927044) | Cod sursa (job #1904768) | Cod sursa (job #1255014) | Cod sursa (job #1410163)
#include <fstream>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
const int NMax = 505;
int N,M,Matrix[NMax][NMax];
int RMQ[NMax][NMax][13];
int Log[NMax];
void Read()
{
f>>N>>M;
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
f>>Matrix[i][j],RMQ[i][j][0]=Matrix[i][j];
}
void precalcLog()
{
for(int i=2;i<=N;i++)
Log[i]=Log[i/2]+1;
}
void precalcRMQ()
{
for(int i=1;(1<<i)<=N;i++)
{
for(int line=1;line<=N-(1<<i)+1;line++)
for(int col=1;col<=N-(1<<i)+1;col++)
{
int Max=RMQ[line][col][i-1];
Max=max(Max,RMQ[line+(1<<(i-1))][col][i-1]);
Max=max(Max,RMQ[line+(1<<(i-1))][col+(1<<(i-1))][i-1]);
Max=max(Max,RMQ[line][col+(1<<(i-1))][i-1]);
RMQ[line][col][i]=Max;
}
}
}
int countRMQ(int x,int y,int k)
{
int diff=Log[k];
int ans=0;
ans=max(ans,RMQ[x][y][diff]);
ans=max(ans,RMQ[x+k-(1<<diff)][y][diff]);
ans=max(ans,RMQ[x][y+k-(1<<diff)][diff]);
ans=max(ans,RMQ[x+k-(1<<diff)][y+k-(1<<diff)][diff]);
return ans;
}
int main()
{
Read();
precalcLog();
precalcRMQ();
for(int i=1;i<=M;i++)
{
int x,y,k;
f>>x>>y>>k;
g<<countRMQ(x,y,k)<<"\n";
}
return 0;
}