Pagini recente » Cod sursa (job #1211525) | Cod sursa (job #825932)
Cod sursa(job #825932)
#include<fstream>
#include<cmath>
using namespace std;
int n,Q,mat[510][510];
int rmq[510][510][10],logaritm2[510];
inline void RMQ()
{
int i,j,k,p;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
rmq[i][j][0]=mat[i][j];
for(k=1;(1<<k)<=n;k++)
{
p=(1<<(k-1));
for(i=1;i+(1<<k)<=n+1;i++)
{
for(j=1;j+(1<<k)<=n+1;j++)
{
rmq[i][j][k]=max(max(rmq[i][j][k-1],rmq[i+p][j][k-1]),max(rmq[i][j+p][k-1],rmq[i+p][j+p][k-1]));
}
}
}
logaritm2[1]=0;
for(i=2;i<=n;i++)
logaritm2[i]=logaritm2[i/2]+1;
}
int main()
{
int i,j,k,p,dif;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
fin>>n>>Q;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
fin>>mat[i][j];
RMQ();
while(Q--)
{
fin>>i>>j>>k;
p=logaritm2[k];
dif=k-(1<<p);
fout<<max(max(rmq[i][j][p],rmq[i+dif][j][p]),max(rmq[i][j+dif][p],rmq[i+dif][j+dif][p]))<<"\n";
}
fin.close();
fout.close();
return 0;
}