Pagini recente » Cod sursa (job #1782552) | Cod sursa (job #2068600) | Cod sursa (job #1776182) | Cod sursa (job #1447) | Cod sursa (job #2334652)
#include <bits/stdc++.h>
#define maxn 500
#define maxl2 18
#define fi first
#define se second
using namespace std;
int v[maxn*maxn+5];
int dp[maxl2+5][maxn*maxn+5];
int getl2 ( int pin, int n )
{
int x = log(n) / log(2);
x += ( ((1<<x) < n) && pin );
return x;
}
int rmq ( pair<int,int> itv )
{
int l2 = getl2 ( 0, itv.se - itv.fi + 1 );
return max ( dp[l2][itv.fi], dp[l2][itv.se-(1<<l2)+1] );
}
int main ()
{
ifstream fin ( "plantatie.in" );
ofstream fout ( "plantatie.out" );
int n, t;
fin >> n >> t;
int i, j, sn;
for ( i = 0, sn = n * n; i < sn; i++ )
fin >> v[i];
for ( i = 0; i < sn; i++ )
dp[0][i] = v[i];
int lm = getl2 ( 1, sn );
for ( i = 1; i <= lm; i++ )
for ( j = 0; j <= sn - (1<<i); j++ )
dp[i][j] = max ( dp[i-1][j], dp[i-1][j+(1<<(i-1))] );
int a, b, k, ans;
while (t--)
{
fin >> a >> b >> k;
a--; b--;
for ( ans = 0, i = 0; i < k; i++ )
ans = max ( ans, rmq ( {(a+i)*n+b, (a+i)*n+b+k-1} ));
fout << ans << '\n';
}
fin.close ();
fout.close ();
return 0;
}