Pagini recente » Cod sursa (job #2983326) | Cod sursa (job #2987636) | Cod sursa (job #2902296) | Cod sursa (job #2926619) | Cod sursa (job #2723035)
#include <fstream>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int l[505], v[505][505], m[20][505][505], lg[505];
void rmq(int n)
{
int i, j, l, a, b, c, d;
lg[1]=0;
for(i=2; i<=n; i++)
lg[i]=lg[i>>1]+1;
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
m[0][i][j]=v[i][j];
}
for (l=1;l<=lg[n];l++)
{
for (i=1;i<=n-(1<<l)+1;i++)
{
for (j=1;j<=n-(1<<l)+1;j++)
{
a=m[l-1][i][j];
b=m[l-1][i+(1<<(l-1))][j];
c=m[l-1][i][j+(1<<(l-1))];
d=m[l-1][i+(1<<(l-1))][j+(1<<(l-1))];
m[l][i][j]=max(a,max(b,max(c,d)));
}
}
}
}
int answer(int x, int y, int k)
{
int a, b, c, d;
a=m[lg[k]][x][y];
b=m[lg[k]][x-(1<<(lg[k]))+k][y];
c=m[lg[k]][x][y-(1<<(lg[k]))+k];
d=m[lg[k]][x-(1<<(lg[k]))+k][y-(1<<(lg[k]))+k];
return max(a, max(b, max(c, d)));
}
int main()
{
int n, m, i, j, x, y, k;
fin>>n>>m;
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
fin>>v[i][j];
}
rmq(n);
for(i=1; i<=m; i++)
{
fin>>x>>y>>k; /// linia, coloana, latura
fout<<answer(x, y, k)<<'\n';
}
return 0;
fin.close();
fout.close();
}