Pagini recente » Cod sursa (job #1405046) | Monitorul de evaluare | Istoria paginii runda/wellcodesimulareav-12martie | Cod sursa (job #2922948) | Cod sursa (job #1347849)
#include <iostream>
#include <fstream>
#define N 505
using namespace std;
int rmq[10][N][N];
int a[N][N];
int lg[N];
int n,m;
void Lungime()
{
lg[1]=0;
for(int i=2; i<=n; i++)
lg[i]=lg[i/2]+1;
}
void Create_Rmq()
{
int i,j,p,k;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
rmq[0][i][j]=a[i][j];
for(p=1; (1<<p)<=n; p++)
{
for(i=1<<p; i<=n; i++)
{
for(j=1<<p; j<=n; j++)
{
k=1<<(p-1);
//cout<<rmq[p-1][i-k][j]<<" "<<rmq[p-1][i][j]<<" "<<rmq[p-1][i][j-k]<<" "<<rmq[p-1][i-k][j-k]<<"--";
rmq[p][i][j]=max(rmq[p-1][i-k][j],rmq[p-1][i][j]);
rmq[p][i][j]=max(rmq[p][i][j],rmq[p-1][i][j-k]);
rmq[p][i][j]=max(rmq[p][i][j],rmq[p-1][i-k][j-k]);
//cout<<rmq[p][i][j]<<"\n";
}
//cout<<"\n";
}
}
}
void Afisare()
{
int i,j;
int p;
p=3;
for(i=1<<p; i<=n; i++)
{
for(j=1<<p; j<=n; j++)
cout<<rmq[p][i][j]<<" ";
cout<<"\n";
}
}
int main()
{
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
fin>>n>>m;
int i,j,d,sol,x,y,k,x2,y2;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
fin>>a[i][j];
Lungime();
Create_Rmq();
//Afisare();
for(i=1; i<=m; i++)
{
fin>>x>>y>>k;
x2=x+k-1;
y2=y+k-1;
d=lg[k];
//cout<<x2<<" "<<y2<<"\n";
sol=max(rmq[d][x+(1<<d)-1 ][y+(1<<d)-1],rmq[d][x+(1<<d)-1][y2]);
sol=max(sol,rmq[d][x2][y+(1<<d)-1]);
sol=max(sol,rmq[d][x2][y2]);
fout<<sol<<"\n";
}
return 0;
}