Pagini recente » Cod sursa (job #1101364) | Cod sursa (job #1927332) | Cod sursa (job #266646) | Cod sursa (job #2090402) | Cod sursa (job #2566607)
#include <bits/stdc++.h>
#define NMAX 505
#define LOGMAX 20
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int a[NMAX][NMAX];
struct tip{int x;int y;};
tip sol[NMAX][NMAX][LOGMAX];
int n,m;
int i,j;
void prel();
int main()
{fin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
fin>>a[i][j];
prel();
for(i=1;i<=m;i++)
{
int vx,vy,r;
fin>>vx>>vy>>r;
int lvx,lvy;
lvx=vx+r-1;
lvy=vy+r-1;
int lg= log2(r);
fout<< max (max( a[sol[vx][vy][lg].x][sol[vx][vy][lg].y ], a[sol[ lvx - (1<<lg)+1 ][vy][lg].x][sol[lvx- (1<<lg)+1][vy][lg].y ] ) , max( a [sol[vx][lvy- (1<<lg)+1 ][lg].x][sol[vx][lvy- (1<<lg)+1 ][lg].y] ,a [sol[lvx- (1<<lg)+1][lvy- (1<<lg)+1 ][lg].x][sol[lvx- (1<<lg)+1][lvy- (1<<lg)+1 ][lg].y] ))<<'\n';
}
return 0;
}
void prel()
{
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
sol[i][j][0]={i,j};
for(int lg=1; (1<<lg)<=n;lg++)
for(i=1;i + (1<<lg)-1<=n;i++)
for(j=1;j+(1<<lg)-1<=n;j++)
{
if( a[sol[i][j][lg-1].x][sol[i][j][lg-1].y] > a[sol[i+ (1<<(lg-1))][j][lg-1].x][sol[i+ (1<<(lg-1))][j][lg-1].y] && /**/a[sol[i][j][lg-1].x][sol[i][j][lg-1].y] > a[sol[i+ (1<<(lg-1))][j+ (1<<(lg-1))][lg-1].x][sol[i+ (1<<(lg-1))][j+ (1<<(lg-1))][lg-1].y] && a[sol[i][j][lg-1].x][sol[i][j][lg-1].y] > a[sol[i][j+ (1<<(lg-1))][lg-1].x][sol[i][j+ (1<<(lg-1))][lg-1].y])
sol[i][j][lg]=sol[i][j][lg-1];
if( a[sol[i][j][lg-1].x][sol[i][j][lg-1].y] < a[sol[i+ (1<<(lg-1))][j][lg-1].x][sol[i+ (1<<(lg-1))][j][lg-1].y] && /**/a[sol[i+ (1<<(lg-1))][j][lg-1].x][sol[i+ (1<<(lg-1))][j][lg-1].y] > a[sol[i+ (1<<(lg-1))][j+ (1<<(lg-1))][lg-1].x][sol[i+ (1<<(lg-1))][j+ (1<<(lg-1))][lg-1].y] && a[sol[i+ (1<<(lg-1))][j][lg-1].x][sol[i+ (1<<(lg-1))][j][lg-1].y] > a[sol[i][j+ (1<<(lg-1))][lg-1].x][sol[i][j+ (1<<(lg-1))][lg-1].y])
sol[i][j][lg]=sol[i+ (1<<(lg-1))][j][lg-1];
if( a[sol[i+ (1<<(lg-1))][j+ (1<<(lg-1))][lg-1].x][sol[i+ (1<<(lg-1))][j+ (1<<(lg-1))][lg-1].y] > a[sol[i+ (1<<(lg-1))][j][lg-1].x][sol[i+ (1<<(lg-1))][j][lg-1].y] && /**/a[sol[i][j][lg-1].x][sol[i][j][lg-1].y] < a[sol[i+ (1<<(lg-1))][j+ (1<<(lg-1))][lg-1].x][sol[i+ (1<<(lg-1))][j+ (1<<(lg-1))][lg-1].y] && a[sol[i+ (1<<(lg-1))][j+ (1<<(lg-1))][lg-1].x][sol[i+ (1<<(lg-1))][j+ (1<<(lg-1))][lg-1].y] > a[sol[i][j+ (1<<(lg-1))][lg-1].x][sol[i][j+ (1<<(lg-1))][lg-1].y])
sol[i][j][lg]=sol[i+ (1<<(lg-1))][j+(1<<(lg-1))][lg-1];
if( a[sol[i][j+ (1<<(lg-1))][lg-1].x][sol[i][j+ (1<<(lg-1))][lg-1].y] > a[sol[i+ (1<<(lg-1))][j][lg-1].x][sol[i+ (1<<(lg-1))][j][lg-1].y] && /**/a[sol[i][j+ (1<<(lg-1))][lg-1].x][sol[i][j+ (1<<(lg-1))][lg-1].y] > a[sol[i+ (1<<(lg-1))][j+ (1<<(lg-1))][lg-1].x][sol[i+ (1<<(lg-1))][j+ (1<<(lg-1))][lg-1].y] && a[sol[i][j][lg-1].x][sol[i][j][lg-1].y] < a[sol[i][j+ (1<<(lg-1))][lg-1].x][sol[i][j+ (1<<(lg-1))][lg-1].y])
sol[i][j][lg]=sol[i][j+ (1<<(lg-1))][lg-1];
}
}