Pagini recente » Cod sursa (job #1769201) | Cod sursa (job #2143430) | Cod sursa (job #1238508) | Cod sursa (job #3213997) | Cod sursa (job #2397537)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
const int N = 509;
int a[N][N], rmq[N][N][20];
int n,k;
void Rmq()
{
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
rmq[i][j][0]=a[i][j];
for(int k=1; k<=log2(n)+1; k++)
for(int i=1; i<=n&&i+(1<<k)<=n+1; i++)
for(int j=1; j<=n&&j+(1<<k)<=n+1; j++)
{
rmq[i][j][k]=rmq[i][j][k-1];
rmq[i][j][k]=max(rmq[i][j][k],rmq[i+(1<<(k-1))][j][k-1]);
rmq[i][j][k]=max(rmq[i][j][k],rmq[i][j+(1<<(k-1))][k-1]);
rmq[i][j][k]=max(rmq[i][j][k],rmq[i+(1<<(k-1))][j+(1<<(k-1))][k-1]);
}
}
void solve()
{
Rmq();
while(k)
{
int x,y,K;
k--;
fin>>x>>y>>K;
int put=log2(K);
int ans=max(rmq[x][y][put],rmq[x+K-(1<<put)][y][put]);
ans=max(ans,rmq[x][y+K-(1<<put)][put]);
ans=max(ans,rmq[x+K-(1<<put)][y+K-(1<<put)][put]);
fout<<ans<<'\n';
}
}
int main()
{
fin>>n>>k;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
fin>>a[i][j];
solve();
return 0;
}