Pagini recente » Cod sursa (job #1787680) | Cod sursa (job #2689834) | Cod sursa (job #1339345) | Cod sursa (job #2519744) | Cod sursa (job #2229518)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("plantatie.in");
ofstream fout ("plantatie.out");
const short NMAX = 505;
int rmq[NMAX][NMAX][20] , 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;
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 ; i++)
for(int j = 1 ; j <= n ; 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;
fout << max({rmq[x][y][lg2[y - x + 1]] , rmq[x + k - 1 - (1 << lg2[y - x + 1]) + 1][y][lg2[y - x + 1]] ,
rmq[x][y + k - 1 - (1 << lg2[y - x + 1]) + 1][lg2[y - x + 1]] , rmq[x + k - 1 - (1 << lg2[y - x + 1]) + 1][y + k - 1 - (1 << lg2[y - x + 1]) + 1][lg2[y - x + 1]]}) << "\n";
}
fin.close();
fout.close();
return 0;
}