Pagini recente » Cod sursa (job #621711) | Cod sursa (job #1139756) | Cod sursa (job #1044457) | Cod sursa (job #2929310) | Cod sursa (job #2855723)
#include <bits/stdc++.h>
#pragma GCC optimize("O2")
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int n,i,j,k,q,l;
int rmq[505][505][10],l2[505];
int mymax(int a, int b, int c, int d)
{
if(a>=b&&a>=c&&a>=d)return a;
if(b>=a&&b>=c&&b>=d)return b;
if(c>=a&&c>=b&&c>=d)return c;
return d;
}
int query(int i, int j, int k)
{
int l=l2[k];
return mymax(rmq[i][j][l],rmq[i][j+k-(1<<l)][l],rmq[i+k-(1<<l)][j][l],rmq[i+k-(1<<l)][j+k-(1<<l)][l]);
}
signed main()
{
fin>>n>>q;
for(i=2;i<=n;i++)l2[i]=l2[i>>1]+1;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
fin>>rmq[i][j][0];
for(l=1;l<9;l++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(min(n-i+1,n-j+1)<=(1<<l))
rmq[i][j][l]=mymax(rmq[i][j][l-1],rmq[i][j+(1<<(l-1))][l-1],rmq[i+(1<<(l-1))][j][l-1],rmq[i+(1<<(l-1))][j+(1<<(l-1))][l-1]);
while(q--)
{
fin>>i>>j>>k;
fout<<query(i,j,k)<<'\n';
}
return 0;
}