Pagini recente » Cod sursa (job #2144036) | Cod sursa (job #1859598) | Cod sursa (job #2907552) | Cod sursa (job #1709287) | Cod sursa (job #2120434)
#include <fstream>
using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");
const int N = 502, L = 10;
int rmq[N][N][L], put[L], lg[N], n, x, y, k;
void process(){
lg[1] = 0;
for(int i=2;i<=n;i++)
lg[i] = lg[i/2] + 1;
put[0] = 1;
for(int i=1;i<=L;i++)
put[i] = put[i-1] * 2;
for(int k=1;put[k]<=n;k++)
for(int i=1;i<=n-put[k]+1;i++)
for(int j=1;j<=n-put[k]+1;j++)
rmq[i][j][k] = max(max(rmq[i][j][k-1],rmq[i+put[k-1]][j][k-1]),
max(rmq[i][j+put[k-1]][k-1],rmq[i+put[k-1]][j+put[k-1]][k-1]));
}
int query(){
int l = lg[k], dist;
dist = k - put[l];
return max(max(rmq[x][y][l], rmq[x+dist][y][l]),
max(rmq[x][y+dist][l], rmq[x+dist][y+dist][l]));
}
int main()
{
int m;
in>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
in>>rmq[i][j][0];
process();
for(int i=1;i<=m;i++){
in>>x>>y>>k;
out<<query()<<"\n";
}
in.close();
out.close();
return 0;
}