Pagini recente » Cod sursa (job #1209204) | Cod sursa (job #191030) | Cod sursa (job #2095309) | Cod sursa (job #1183986) | Cod sursa (job #2189336)
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
int a[11][500][500],n,m;
void RMQ()
{
int i,j,aux,k,s;
for(k=1,s=2;s<=n;k++,s*=2)
{
for(i=1;i+s<=n+1;i++)
{
for(j=1;j+s<=n+1;j++)
{
aux=max(a[k-1][i][j],a[k-1][i][j+s/2]);
aux=max(aux,a[k-1][i+s/2][j]);
aux=max(aux,a[k-1][i+s/2][j+s/2]);
a[k][i][j]=aux;
}
}
}
}
void Afisare()
{
for(int k=0;k<=4;k++)
{
cout<<" "<<k<<"\n";
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cout<<a[k][i][j]<<" ";
}
cout<<"\n";
}
cout<<"\n\n";
}
}
int main()
{
int i,j,aux,x,y,lung,k;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
fin>>n>>m;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
fin>>a[0][i][j];
}
}
RMQ();
//Afisare();
for(i=0;i<m;i++)
{
fin>>x>>y>>lung;
k=0;
aux=1;
while(aux*2<=lung)
{
k++;
aux*=2;
}
fout<<max(a[k][x][y],max(a[k][x+lung-1-aux+1][y],max(a[k][x][y-1+lung-aux+1],a[k][x+lung-1-aux+1][y+lung-1-aux+1])))<<"\n";
}
return 0;
}