Pagini recente » Cod sursa (job #760988) | Cod sursa (job #19491) | Cod sursa (job #1370979) | Cod sursa (job #2765193) | Cod sursa (job #1526980)
#include <bits/stdc++.h>
using namespace std;
//http://www.infoarena.ro/problema/euclid
#define M 508
ifstream in("plantatie.in");
ofstream out("plantatie.out");
long int rmq[M][M][30],lg[M];
inline long int maxi(long int a, long int b)
{
if(a>b)return a;
return b;
}
inline void RMQ(long int n)
{ long int i,j,a,b;
b=lg[n];
for(a=1;a<=b;a++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{ int x,y,z;
x=maxi(rmq[i][j][a-1],rmq[i][j+(1<<(a-1))][a-1]);
y=maxi(x,rmq[i+(1<<(a-1))][j][a-1]);
z=maxi(y,rmq[i+(1<<(a-1))][j+(1<<(a-1))][a-1]);
rmq[i][j][a]=z;
}
}
inline int get_rmq(long a, long b,long nr)
{
long el=lg[nr];
long int x=maxi(rmq[a][b][el],rmq[a][b+nr-(1<<(el))][el]);
long int y=maxi(x, rmq[a+nr-(1<<el)][b][el]);
return maxi(y,rmq[a+nr-(1<<el)][b+nr-(1<<el)][el]);
}
int main()
{ long m,n,h,w,t,nr,i,j,k,l,a,b;
in>>n>>m;
for(i=2;i<=508;i++)
lg[i]=lg[i/2]+1;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
in>>rmq[i][j][0];
RMQ(n);
for(i=1;i<=m;i++)
{
in>>a>>b>>l;
out<<get_rmq(a,b,l)<<'\n';
}
return 0;
}