Pagini recente » Cod sursa (job #3306705) | Cod sursa (job #689552) | Borderou de evaluare (job #1479163) | Borderou de evaluare (job #2772754) | Cod sursa (job #3358656)
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int ans[505][505][10][10];
int main(){
int n,q;
fin>>n>>q;
vector<vector<int>> v(n,vector<int>(n));
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
fin>>v[i][j];
int p=31-__builtin_clz(n);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
ans[i][j][0][0]=v[i][j];
for(int x=0;x<=p;x++){
for(int y=0;y<=p;y++){
if(x==0 && y==0) continue;
for(int i=0;i+(1<<x)<=n;i++){
for(int j=0;j+(1<<y)<=n;j++){
if(x==0){
ans[i][j][x][y]=max(
ans[i][j][x][y-1],
ans[i][j+(1<<(y-1))][x][y-1]
);
}
else{
ans[i][j][x][y]=max(
ans[i][j][x-1][y],
ans[i+(1<<(x-1))][j][x-1][y]
);
}
}
}
}
}
while(q--){
int a,b,l;
fin>>a>>b>>l;
a--;b--;
int x=31-__builtin_clz(l);
int y=x;
int rez=max(
max(ans[a][b][x][y],
ans[a+l-(1<<x)][b][x][y]),
max(ans[a][b+l-(1<<y)][x][y],
ans[a+l-(1<<x)][b+l-(1<<y)][x][y])
);
fout<<rez<<'\n';
}
return 0;
}