Pagini recente » Cod sursa (job #2500117) | Cod sursa (job #2170339) | Cod sursa (job #1491390) | Cod sursa (job #1077748) | Cod sursa (job #1684377)
#include <bits/stdc++.h>
using namespace std;
int n , m , rmq[11][509][509], lg[511];
void cit()
{
scanf("%d %d", &n , &m);
for(int i = 1 ; i <=n; ++i)
for(int j = 1 ; j <= n ; ++j)
scanf("%d", &rmq[0][i][j]);
for(int i = 2; i<= 505; ++i)
lg[i] = lg[i>>1] + 1;
}
void build()
{
for(int pas = 1 ; (1<<pas) <= n; ++pas) {
int act = (1<<pas), bef = 1<<(pas-1);
for(int i = 1; i + act-1 <= n ; ++i)
for(int j = 1 ; j + act-1 <= n ; ++j)
rmq[pas][i][j] = max({rmq[pas - 1][i][j], rmq[pas - 1][i + bef][j], rmq[pas - 1][i][j + bef], rmq[pas - 1][i + bef][j + bef]});
}
}
int rasp(int i, int j, int k)
{
int catl = lg[k];
int val = 1 << catl;
int to = j + k - 1;
int to2 = i+k-1;
return max({rmq[catl][i][j], rmq[catl][i][to - val + 1], rmq[catl][to2 - val + 1][j], rmq[catl][to2 - val + 1][to - val + 1]});
}
void solve()
{
freopen("plantatie.out", "w", stdout);
while(m--)
{
int i , j , k;
scanf("%d%d%d", &i, &j, &k);
printf("%d\n", rasp(i, j, k));
}
}
int main()
{
freopen("plantatie.in", "r", stdin);
cit();
build();
solve();
}