Pagini recente » Cod sursa (job #1212812) | Monitorul de evaluare | Cod sursa (job #1218891) | Cod sursa (job #2659176) | Cod sursa (job #3358658)
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int a[505][505];
int dp[505][505][10];
int main(){
int n,q;
fin>>n>>q;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
fin>>a[i][j];
int LOG=31-__builtin_clz(n);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
dp[i][j][0]=a[i][j];
for(int k=1;k<=LOG;k++){
int len=(1<<(k-1));
for(int i=0;i+(1<<k)<=n;i++){
for(int j=0;j+(1<<k)<=n;j++){
dp[i][j][k]=max({
dp[i][j][k-1],
dp[i+len][j][k-1],
dp[i][j+len][k-1],
dp[i+len][j+len][k-1]
});
}
}
}
while(q--){
int x,y,l;
fin>>x>>y>>l;
x--;y--;
int k=31-__builtin_clz(l);
int len=(1<<k);
int x2=x+l-len;
int y2=y+l-len;
int ans=max({
dp[x][y][k],
dp[x2][y][k],
dp[x][y2][k],
dp[x2][y2][k]
});
fout<<ans<<"\n";
}
return 0;
}