Pagini recente » Cod sursa (job #1344718) | Cod sursa (job #1681233) | Cod sursa (job #311999) | Cod sursa (job #395389) | Cod sursa (job #2334655)
#include <bits/stdc++.h>
#define maxn 500
#define maxl2 18
#define fi first
#define se second
#define DIM 1000000
using namespace std;
FILE *fin, *fout;
int v[maxn*maxn+5];
int dp[maxn*maxn+5][maxl2+5];
char BUFF[DIM+5];
int k;
void _reset ()
{
if ( k == DIM )
{
fread ( BUFF, 1, DIM, fin );
k = 0;
}
}
void _read ( int &nr )
{
nr = 0;
while ( BUFF[k] < '0' || BUFF[k] > '9' )
{
k++;
_reset ();
}
while ( BUFF[k] >= '0' && BUFF[k] <= '9' )
{
nr = nr * 10 + BUFF[k++] - '0';
_reset ();
}
}
int getl2 ( int pin, int n )
{
int x = log(n) / log(2);
x += ( ((1<<x) < n) && pin );
return x;
}
inline int rmq ( pair<int,int> itv )
{
int l2 = getl2 ( 0, itv.se - itv.fi + 1 );
return max ( dp[itv.fi][l2], dp[itv.se-(1<<l2)+1][l2] );
}
int main ()
{
fin = fopen ( "plantatie.in", "r" );
fout = fopen ( "plantatie.out", "w" );
int n, t;
_read(n); _read(t);
int i, j, sn;
for ( i = 0, sn = n * n; i < sn; i++ )
_read(v[i]);
for ( i = 0; i < sn; i++ )
dp[i][0] = v[i];
int lm = getl2 ( 1, sn );
for ( i = 1; i <= lm; i++ )
for ( j = 0; j <= sn - (1<<i); j++ )
dp[j][i] = max ( dp[j][i-1], dp[j+(1<<(i-1))][i-1] );
int a, b, k, ans;
while (t--)
{
_read(a); _read(b); _read(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} ));
fprintf ( fout, "%d\n", ans );
}
fclose ( fin );
fclose ( fout );
return 0;
}