Pagini recente » Borderou de evaluare (job #587924) | Borderou de evaluare (job #1461645) | Borderou de evaluare (job #261775) | Borderou de evaluare (job #2904706) | Cod sursa (job #2462705)
#include <bits/stdc++.h>
#define min max
using namespace std;
ifstream fin ("plantatie.in");
ofstream fout ("plantatie.out");
void read();
void build_table();
void solve();
int n, m, v[505][505][int(log2(505))+5];
int main()
{
read();
build_table();
solve();
return 0;
}
void solve()
{
for(int q=1; q<=m; q++)
{
int x, y, l;
fin >> x >> y >> l;
int k = log2(l);
int new_x = x+l-(1<<k), new_y = y+l-(1<<k);
fout << min(min(v[x][y][k], v[new_x][y][k]),min(v[new_x][new_y][k], v[x][new_y][k]));
fout << '\n';
}
}
void build_table()
{
for(int k=1; (1<<k)<=n; k++)
for(int i=1; i<=n-(1<<k)+1; i++)
for(int j=1; j<=n-(1<<k)+1; j++)
v[i][j][k] = min(min(v[i][j][k-1], v[i+(1<<(k-1))][j][k-1]),
min(v[i][j+(1<<(k-1))][k-1], v[i+(1<<(k-1))][j+(1<<(k-1))][k-1]));
}
void read()
{
fin >> n >> m;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
fin >> v[i][j][0];
}