Pagini recente » Cod sursa (job #1600093) | Cod sursa (job #360591) | Cod sursa (job #3263366) | Cod sursa (job #1533983) | Cod sursa (job #1526947)
#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[19][19][M][M],lg[M],v[M];
inline long int maxi(long int a, long int b)
{
if(a>b)return a;
return b;
}
inline void RMQ(long int m,long int n)
{ long int i,j,a,b;
for(i=0;i<=lg[m];i++)
for(j=0;j<=lg[n];j++)
for(a=1;a<=m-(1<<i)+1;a++)
for(b=1;b<=n-(1<<j)+1;b++)
{ if(i==0&&j==0)continue;
int x,y,z;
if(i==0)
{ x=maxi(rmq[i][j-1][a][b],rmq[i][j-1][a][b+(1<<(j-1))]);
rmq[i][j][a][b]=x;
continue;
}
if(j==0)
{ x=maxi(rmq[i-1][j][a][b],rmq[i-1][j][a+(1<<(i-1))][b]);
rmq[i][j][a][b]=x;
continue;
}
x=maxi(rmq[i-1][j-1][a+(1<<(i-1))][b+(1<<(j-1))],rmq[i-1][j-1][a][b]);
y=maxi(x,rmq[i-1][j-1][a+(1<<(i-1))][b]);
z=maxi(y,rmq[i-1][j-1][a][b+(1<<(j-1))]);
rmq[i][j][a][b]=y;
}
}
inline int get_rmq(long a, long b,long nrl, long nrc)
{ //////////
long elc=lg[nrc],ell=lg[nrl];
int x=maxi(rmq[ell][elc][a][b],rmq[ell][elc][a+nrl-(1<<ell)][b]);
int y=maxi(x, rmq[ell][elc][a][b+nrc-(1<<elc)]);
return maxi(y,rmq[ell][elc][a+nrl-(1<<ell)][b+nrc-(1<<elc)]);
}
int main()
{ long m,n,h,w,t,nr,i,j,k,l,ma=-1,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[0][0][i][j];
RMQ(n,n);
for(i=1;i<=m;i++)
{
in>>a>>b>>l;
out<<get_rmq(a,b,l,l)<<'\n';
}
return 0;
}