Pagini recente » Istoria paginii runda/testfminostres/clasament | Cod sursa (job #2964564) | Autentificare | Cod sursa (job #1995887) | Cod sursa (job #2754864)
#include <bits/stdc++.h>
using namespace std;
ifstream f("plantatie.in");
ofstream o("plantatie.out");
int rmq[501][501][10], a[501][501];
void creareMatrice(int n, int a[501][501])
{
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
rmq[i][j][0] = a[i][j];
for (int k = 1; (1<<k) <= n; k++)
for (int i = 1; i + (1<<k) - 1 <= n; i++)
for (int j = 1; j + (1<<k) - 1 <= n; j++)
rmq[i][j][k] = max(max(rmq[i][j][k-1], rmq[i][j+(1<<(k-1))][k-1]), max(rmq[i+(1<<(k-1))][j][k-1], rmq[i+(1<<(k-1))][j+(1<<(k-1))][k-1]));
}
int gasireMaxim(int i, int j, int k)
{
int l = (int)log2(k);
// cout<<rmq[i+k-(1<<l)][j][l]<<' ';
return max(max(rmq[i][j][l],rmq[i][j+k-(1<<l)][l]), max(rmq[i+k-(1<<l)][j][l], rmq[i+k-(1<<l)][j+k-(1<<l)][l]));
}
int main()
{
int n, m, i1,j1,k;
f>>n>>m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
f>>a[i][j];
creareMatrice(n,a);
for (int i = 0; i < m; i++)
{
f>>i1>>j1>>k;
o<<gasireMaxim(i1,j1,k)<<'\n';
}
}