Pagini recente » Cod sursa (job #2696713) | Monitorul de evaluare | Cod sursa (job #2070520) | Cod sursa (job #1521322) | Cod sursa (job #3183213)
#include <iostream>
using namespace std;
int maxim(int a, int b, int c, int d)
{
return max(max(a, b), max(c, d));
}
int main()
{
freopen("plantatie.in", "r", stdin);
freopen("plantatie.out", "w", stdout);
int n, q;
cin>>n>>q;
int rmq[25][n+1][n+1];
///[bit][i][j]->patrat de lungime bit
///min (i, j)...(i+(2^bit)-1)(j+(2^bit)-1)
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
cin>>rmq[0][i][j];
for(int b=1; b<=24; b++)
{
for(int i=1; i+(1<<b)-1<=n; i++)
{
for(int j=1; j+(1<<b)-1<=n; j++)
{
int i2=i+(1<<(b-1));
int j2=j+(1<<(b-1));
rmq[b][i][j]=maxim(
rmq[b-1][i][j],
rmq[b-1][i2][j],
rmq[b-1][i][j2],
rmq[b-1][i2][j2]);
}
}
}
int lg[n+1];
lg[1]=0;
for(int i=2; i<=n; i++)
lg[i]=1+lg[i/2];
while(q--)
{
int i1, j1, len;
cin>>i1>>j1>>len;
int layer=lg[len];
int lungime=(1<<layer);
int i2=i1+len-lungime;
int j2=j1+len-lungime;
int min1=rmq[layer][i1][j1];
int min2=rmq[layer][i1][j2];
int min3=rmq[layer][i2][j1];
int min4=rmq[layer][i2][j2];
cout<<max(max(min1, min2), max(min3, min4))<<'\n';
}
return 0;
}