Pagini recente » Cod sursa (job #1792123) | Cod sursa (job #609097) | Cod sursa (job #692649) | Cod sursa (job #2143147) | Cod sursa (job #2790941)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int rmax[500][500][9], i,j,k,N,M,plantatie[500][500],lg[500], cnt;
void create_table()
{
for(i=1; i<=N; i++)
for(j=1; j<=N; j++)
rmax[i][j][0]=plantatie[i][j];
for(k=1; (1<<k)<=N; k++)
for(i=1; i+(1<<k)-1<=N; i++)
for(j=1; j+(1<<k)-1<=N; j++)
{
int maxi=-1;
if(maxi<rmax[i][j][k-1])
maxi=rmax[i][j][k-1];
if(maxi<rmax[i+(1<<k-1)][j][k-1])
maxi=rmax[i+(1<<k-1)][j][k-1];
if(maxi<rmax[i][j+(1<<k-1)][k-1])
maxi=rmax[i][j+(1<<k-1)][k-1];
if(maxi<rmax[i+(1<<k-1)][j+(1<<k-1)][k-1])
maxi=rmax[i+(1<<k-1)][j+(1<<k-1)][k-1];
rmax[i][j][k]=maxi;
}
}
int cauta(int i, int j, int k)
{
int p = lg[k], dif;
dif = k - (1 << p);
int maxi=-1;
if(rmax[i][j][p] > maxi)
maxi=rmax[i][j][p];
if(rmax[i+dif][j][p]>maxi)
maxi=rmax[i+dif][j][p];
if(rmax[i][j+dif][p]>maxi)
maxi=rmax[i][j+dif][p];
if(rmax[i+dif][j+dif][p]>maxi)
maxi=rmax[i+dif][j+dif][p];
return maxi;
}
int main()
{
fin>>N>>M;
for(i=1; i<=N;i++)
for(j=1; j<=N; j++)
fin>>plantatie[i][j];
create_table();
lg[1]=0;
for (i=2;i<=N;i++)
lg[i]=lg[i/2]+1;
for(cnt=1; cnt<=M; cnt++)
{
fin>>i>>j>>k;
fout<<cauta(i,j,k)<<'\n';
}
return 0;
}