Pagini recente » Cod sursa (job #809177) | Cod sursa (job #551022) | Cod sursa (job #2727164) | Cod sursa (job #1827781) | Cod sursa (job #2789756)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("plantatie.in");
ofstream fout ("plantatie.out");
const int NMAX=510;
const int KMAX=33;
int rmq[NMAX][NMAX][KMAX],n,m,logaritm[NMAX];
int main()
{
fin >>n>>m;
int t=1;
while ((1<<t)<NMAX){
logaritm[1<<t]++;
t++;
}
while (t<NMAX){
logaritm[t]+=logaritm[t-1];
//fout <<logaritm[t]<<' ';
t++;
}
for (int i=1;i<=n;++i){
for (int j=1;j<=n;++j){
fin >>rmq[i][j][0];
}
}
int kmax=logaritm [n];
for (int k=1;k<=kmax;k++){
for (int i=1;i+(1<<k)-1<=n;++i){
for (int j=1;j+(1<<k)-1<=n;++j){
int a,b,c,d;
a=rmq[i][j][k-1];
b=rmq[i][min (n,j+(1<<k-1))][k-1];
c=rmq[min (n,i+(1<<k-1))][j][k-1];
d=rmq[min (n,i+(1<<k-1))][min (n,j+(1<<k-1))][k-1];
rmq[i][j][k]=max (max (a,b),max (c,d));
//fout <<rmq[i][j][k]<<' ';
}
//fout <<'\n';
}
//fout <<'\n';
}
for (int r=1;r<=m;++r){
int i,j,c,a,b,d,e;
fin >>i>>j>>c;
int k=logaritm [c];
a=rmq[i][j][k];
b=rmq[i][min (n,j+c-(1<<k))][k];
d=rmq[min (n,i+c-(1<<k))][j][k];
e=rmq[min (n,i+c-(1<<k))][min (n,j+c-(1<<k))][k];
fout <<max(max (a,b),max (d,e))<<'\n';
}
fin.close ();
fout.close ();
return 0;
}