Pagini recente » Cod sursa (job #944134) | Cod sursa (job #1741789) | Cod sursa (job #2025787) | Cod sursa (job #2533057) | Cod sursa (job #2790201)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int latura, nr_query;
// int teren[500][500], tabel[500][500][9];
int teren[10][10], tabel[10][10][4];
int i, j, k;
void gen_tabele();
int rasp_query(int x, int y, int lat);
int main()
{
fin >> latura >> nr_query;
for (i = 0; i < latura; i++)
for (j = 0; j < latura; j++)
fin >> teren[i][j], tabel[i][j][0] = j;
gen_tabele();
int x, y, lat;
for (k = 0; k < nr_query; k++)
{
fin >> x >> y >> lat;
fout << rasp_query(x - 1, y - 1, lat) << "\n";
}
return 0;
}
void gen_tabele()
{
int linie;
for (linie = 0; linie < latura; linie++)
for (j = 1; (1 << j) <= latura; j++)
for (i = 0; i + (1 << j) - 1 < latura; i++)
tabel[linie][i][j] = teren[linie][tabel[linie][i][j - 1]] > teren[linie][tabel[linie][i + (1 << j - 1)][j - 1]]
? tabel[linie][i][j - 1]
: tabel[linie][i + (1 << j - 1)][j - 1];
return;
}
int rasp_query(int x, int y, int lat)
{
int put = log2(lat);
int dif = lat - (1 << put);
int max, maxl;
max = maxl = teren[x][y];
for (i = x; i < lat + x; i++)
{
maxl = teren[i][tabel[i][y][put]] > teren[i][tabel[i][y + dif][put]] ? teren[i][tabel[i][y][put]] : teren[i][tabel[i][y + dif][put]];
if (maxl > max)
max = maxl;
}
return max;
}