Pagini recente » Cod sursa (job #1622825) | Cod sursa (job #892722) | Cod sursa (job #2507881) | Cod sursa (job #2368625) | Cod sursa (job #2137222)
#include <bits/stdc++.h>
#define NMAX 501
#define d D
#define pow2(x) (1 << (x))
std::ifstream in("plantatie.in");
std::ofstream out("plantatie.out");
using namespace std;
int n, m;
int lg[NMAX];
int D[10][NMAX][NMAX];
void Input()
{
in >> n >> m ;
for ( int i =1; i <= n ;++i)
for ( int j =1; j<=n;++j)
in >> D[0][i][j];
}
void build()
{
lg[1]=0;
for ( int i =2; i<=n ;++i)
lg[i]=lg[i/2]+1;
for ( int k =1 ; k <= lg[n]; ++k)
for(int i = 1 ; i <= n-(1 << (k-1)) ; ++i )
for ( int j =1; j <= n-(1 << (k-1)) ; ++j)
{
d[k][i][j] = max ( max(d[k-1][i][j],d[k-1][i+(1 << (k-1))][j]),
max(d[k-1][i][j+(1 << (k-1))] , d[k-1][i+(1 << (k-1))][j+(1 << (k-1))] ) );
}
}
int main()
{
Input();
build();
while (m--) {
int i, j, k;
in>>i>>j>>k;
int p = lg[k];
int sol = max(
max(D[p][i][j], D[p][i][j + k - pow2(p)]),
max(D[p][i + k - pow2(p)][j], D[p][i + k - pow2(p)][j + k - pow2(p)])
);
out << sol << "\n";
}
return 0;
}