Pagini recente » Cod sursa (job #2602238) | Cod sursa (job #2298142) | Cod sursa (job #2276258) | Cod sursa (job #2860898) | Cod sursa (job #1954713)
#include <fstream>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int n,teste;
int rmq[10][500][500];
int log[501];
void citire()
{
f>>n>>teste;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
f>>rmq[0][i][j];
}
void precalculare()
{
log[1]=0;
int S1,S2,S3,S4;
for(int i=2;i<=500;i++)
log[i]=log[i/2]+1;
for(int nivel=1;(1<<nivel)<=n;nivel++)
for(int i=1;i<=n-(1<<nivel)+1;i++)
for(int j=1;j<=n-(1<<nivel)+1;j++)
{
S1=rmq[nivel-1][i][j];
S2=rmq[nivel-1][i][j+(1<<(nivel-1))];
S3=rmq[nivel-1][i+(1<<(nivel-1))][j];
S4=rmq[nivel-1][i+(1<<(nivel-1))][j+(1<<(nivel-1))];
rmq[nivel][i][j]=max(S1,max(S2,max(S3,S4)));
}
}
void testare()
{
int i,j,k,nivel,diff;
for(int test=1;test<=teste;test++)
{
f>>i>>j>>k;
nivel=log[k];
diff=k-(1<<nivel);
g<<max(max(max(rmq[nivel][i][j],rmq[nivel][i+diff][j]),rmq[nivel][i][j+diff]),rmq[nivel][i+diff][j+diff])<<"\n";
}
}
int main()
{
citire();
precalculare();
testare();
f.close();
g.close();
}