Pagini recente » Arhiva de probleme | Cod sursa (job #2825832) | Cod sursa (job #15500) | Cod sursa (job #784749) | Cod sursa (job #2485189)
#include<fstream>
#define max4(a,b,c,d) max(max(a,b),max(c,d))
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
const int NMaxx=5e2+1;
const int PMaxx=18;
int sparseTable[NMaxx][NMaxx][PMaxx];
int log[NMaxx];
void build_sparseTable(int n){
int i,j,k;
for (k=1; (1<<k)<=n; ++k){
for (i=1; i+(1<<k)-1<=n; ++i){
for (j=1; j+(1<<k)-1<=n; ++j){
sparseTable[i][j][k]=max4(sparseTable[i][j][k-1],sparseTable[i][j+(1<<(k-1))][k-1],sparseTable[i+(1<<(k-1))][j][k-1],sparseTable[i+(1<<(k-1))][j+(1<<(k-1))][k-1]);
}
}
}
}
int query(int x,int y,int k){
int p=log[k];
return max4(sparseTable[x][y][p],sparseTable[x+k-(1<<p)][y][p],sparseTable[x][y+k-(1<<p)][p],sparseTable[x+k-(1<<p)][y+k-(1<<p)][p]);
}
int main() {
int n,q,i,j,x,y,k;
fin>>n>>q;
log[1]=0;
for (i=2; i<=n; ++i){
log[i]=1+log[i/2];
}
for (i=1; i<=n; ++i){
for (j=1; j<=n; ++j){
fin>>sparseTable[i][j][0];
}
}
build_sparseTable(n);
for(;q;--q){
fin>>x>>y>>k;
fout<<query(x,y,k)<<"\n";
}
return 0;
}