Pagini recente » Cod sursa (job #1376840) | Cod sursa (job #2743845) | Cod sursa (job #1027329) | Cod sursa (job #1647290) | Cod sursa (job #3330100)
#include <bits/stdc++.h>
using namespace std;
int n,m;
vector<vector<vector<int>>> v;
int main() {
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
cin>>n>>m;
vector<int> log;
vector<int> pow;
log.resize(501);
log[1] = 0;
for(int i=2;i<=500;i++)
log[i] = log[i/2] + 1;
pow.resize(log[n]+1);
v.resize(n+1,vector<vector<int>>(n+1,vector<int>(log[n]+1)));
pow[0] = 1;
for(int i = 1;i<=log[n];i++)
pow[i] = pow[i-1] * 2;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
cin>>v[i][j][0];
}
for(int k=1;k<=log[n];k++){
for(int i=1;i<=n - pow[k-1];i++){
for(int j=1;j<=n - pow[k-1];j++){
int lu = v[i][j][k-1];
int ru = v[i][j+pow[k-1]][k-1];
int ld = v[i+pow[k-1]][j][k-1];
int rd = v[i+pow[k-1]][j+pow[k-1]][k-1];
v[i][j][k] = max({lu,ru,ld,rd});
}
}
}
for(int t=1;t<=m;t++){
int i,j,k;
cin>>i>>j>>k;
int interval = log[k];
int lu = v[i][j][interval];
int ru = v[i][j + k - pow[interval]][interval];
int ld = v[i + k - pow[interval]][j][interval];
int rd = v[i + k - pow[interval]][j + k - pow[interval]][interval];
cout<<max({lu,ru,ld,rd})<<"\n";
}
}