Pagini recente » Cod sursa (job #2514510) | Cod sursa (job #360697) | Cod sursa (job #1347902) | Cod sursa (job #2001670) | Cod sursa (job #2376377)
#include <bits/stdc++.h>
#define maxn 500
#define maxl2 10
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;
int v[maxn+5][maxn+5];
int dp[maxn+5][maxn+5][maxl2+5]; /// dp[i][j][k] = max din dreptunghiul (i,j), (i+(1<<k)-1,j+(1<<k)-1)
int max4 ( int a, int b, int c, int d ) { return max ( max(a,b), max (c,d) ); }
int getl2 ( int n, int pin )
{
int l2 = log (n) / log (2);
l2 += ((1<<l2)<n && pin);
return l2;
}
int rmq ( pii cs, pii cj )
{
int p2i = getl2 ( cj.fi - cs.fi + 1, 0 ), p2j = getl2 ( cj.se - cs.se + 1, 0 );
int M1 = max4 ( dp[cs.fi][cs.se][p2i], dp[cs.fi][cj.se-(1<<p2i)+1][p2i], dp[cj.fi-(1<<p2i)+1][cs.se][p2i], dp[cj.fi-(1<<p2i)+1][cj.se-(1<<p2i)+1][p2i] );
int M2 = max4 ( dp[cs.fi][cs.se][p2j], dp[cs.fi][cj.se-(1<<p2j)+1][p2j], dp[cj.fi-(1<<p2j)+1][cs.se][p2j], dp[cj.fi-(1<<p2j)+1][cj.se-(1<<p2j)+1][p2j] );
return max(M1,M2);
}
int main ()
{
ifstream fin ( "plantatie.in" );
ofstream fout ( "plantatie.out" );
int n, t; fin >> n >> t;
int i, j, k;
for ( i = 0; i < n; i++ )
for ( j = 0; j < n; j++ ) fin >> v[i][j];
int kM = getl2 ( n, 1 );
for ( i = 0; i < n; i++ )
for ( j = 0; j < n; j++ ) dp[i][j][0] = v[i][j];
for ( k = 1; k <= kM; k++ )
for ( i = 0; i < n - (1<<k) + 1; i++ )
for ( j = 0; j < n - (1<<k) + 1; j++ )
dp[i][j][k] = max4 ( dp[i][j][k-1], dp[i+(1<<(k-1))][j][k-1], dp[i][j+(1<<(k-1))][k-1], dp[i+(1<<(k-1))][j+(1<<(k-1))][k-1] );
int a, b, c;
while (t--) fin >> a >> b >> c, fout << rmq ( {a-1,b-1}, {a+c-2,b+c-2} ) << '\n';
fin.close ();
fout.close ();
return 0;
}