Pagini recente » Cod sursa (job #2467071) | Cod sursa (job #2394190) | Cod sursa (job #1709424) | Cod sursa (job #1671069) | Cod sursa (job #2229520)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("plantatie.in");
ofstream fout ("plantatie.out");
const short NMAX = 505;
int rmq[NMAX][NMAX][10] , a[NMAX][NMAX] , n , query , lg2[NMAX];
int main()
{
///rmq[i][j][k] - > elementul maxim din submatricea (i , j) (i + 2 ^ k - 1 , j + 2 ^ k - 1)
int p , x , y , k , xx , yy , q;
fin >> n >> query;
for(int i = 1 ; i <= n ; i++)
for(int j = 1 ; j <= n ; j++)
fin >> rmq[i][j][0];
lg2[1] = 0;
for(int i = 2 ; i <= n ; i++)
lg2[i] = lg2[i / 2] + 1;
for(int k = 1 ; k <= lg2[n] ; k++)
for(int i = 1 ; i <= n - (1 << (k - 1)) ; i++)
for(int j = 1 ; j <= n - (1 << (k - 1)) ; j++)
/// impartim patratul mare in 4 patrate mici fiecare avand latura 2 ^ (k - 1)
{
p = (1 << (k - 1));
rmq[i][j][k] = max({rmq[i][j][k] , rmq[i][j][k - 1] , rmq[i][j + p][k - 1] , rmq[i + p][j][k - 1] , rmq[i + p][j + p][k - 1]});
}
while(query--)
{
fin >> x >> y >> k;
p = lg2[k];
q = (1 << p);
xx = x + k - 1;
yy = y + k - 1;
fout << max({rmq[x][y][p] , rmq[xx - q + 1][y][p] , rmq[x][yy - q + 1][p] , rmq[xx - q + 1][yy - q + 1][p]}) << "\n";
}
fin.close();
fout.close();
return 0;
}