Pagini recente » Cod sursa (job #734111) | Cod sursa (job #497447) | Cod sursa (job #379288) | Cod sursa (job #404659) | Cod sursa (job #2402662)
#include <bits/stdc++.h>
#define Dim 504
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int N,Q,rmq[8][Dim][8][Dim],x;
int a,b,c,d,r1,r2,r3,r4,q1,q2,lat;
int main()
{
f>>N>>Q;
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
{
f>>x;
rmq[0][i][0][j]=x;
}
for(int i=1;i<=N;i++)
for(int k=1;(1<<k)<=N;k++)
for(int j=1;j+(1<<k)-1<=N;j++)
rmq[0][i][k][j]=max(rmq[0][i][k-1][j],rmq[0][i][k-1][j+(1<<(k-1))]);
for(int l=1;(1<<l)<=N;l++)
for(int i=1;i+(1<<l)-1<=N;i++)
for(int k=1;(1<<k)<=N;k++)
for(int j=1;j+(1<<k)-1<=N;j++)
{
rmq[l][i][k][j]=max(rmq[l-1][i][k-1][j],rmq[l-1][i][k-1][j+(1<<(k-1))]);
int ras=max(rmq[l-1][i+(1<<(l-1))][k-1][j],rmq[l-1][i+(1<<(l-1))][k-1][j+(1<<(k-1))]);
rmq[l][i][k][j]=max(ras,rmq[l][i][k][j]);
}
for(int i=1;i<=Q;i++)
{
f>>a>>b>>lat;
c=a+lat-1;
d=b+lat-1;
if(a>c) swap(a,c);
if(b>d) swap(b,d);
int difa=log2(c-a+1);
int difb=log2(d-b+1);
r1=rmq[difa][a][difb][b];
r2=rmq[difa][a][difb][d-(1<<difb)+1];
r3=rmq[difa][c-(1<<difa)+1][difb][b];
r4=rmq[difa][c-(1<<difa)+1][difb][d-(1<<difb)+1];
q1=max(r1,r2);
q2=max(r3,r4);
g<<max(q1,q2)<<'\n';
}
return 0;
}