Pagini recente » Cod sursa (job #3241559) | Cod sursa (job #2122907) | Cod sursa (job #1233669) | Cod sursa (job #739510) | Cod sursa (job #2754108)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int n,m,I,putere_2,a,b,l,Max,poz,In,putere_2_n;
int rmq[9][501][501];//9 linii deoarece log2(500)<9 adica avem posibilitatea de a impartii in 9 puteri ale lui 2 ( 2^0 - 2^8 );
using namespace std;
int main ()
{
f>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
f>>rmq[0][i][j];
}
}
In=0;
putere_2_n=2;
while(putere_2_n<=n){
In++;
for(int i=1;i<=n-putere_2_n/2;i++){
for(int j=1;j<=n-putere_2_n/2;j++){
rmq[In][i][j]=max(rmq[In-1][i][j],max(rmq[In-1][i+putere_2_n/2][j],max(rmq[In-1][i][j+putere_2_n/2],rmq[In-1][i+putere_2_n/2][j+putere_2_n/2])));
}
}
putere_2_n=putere_2_n<<1;
}
putere_2_n=putere_2_n>>1;
for(int i=1;i<=m;i++){
f>>a>>b>>l;
putere_2=putere_2_n;
I=In;
while(putere_2>l){
putere_2=putere_2>>1;
I--;
}
Max=rmq[I][a][b];
l=l-putere_2;
poz=putere_2;
while(l>0){
while(putere_2>l){
putere_2=putere_2>>1;
I--;
}
for(int p=a;p<=a+poz;p=p+putere_2){
Max=max(Max,rmq[I][p][b+poz]);
}
for(int j=b;j<b+poz;j=j+putere_2){
Max=max(Max,rmq[I][a+poz][j]);
}
l=l-putere_2;
poz=poz+putere_2;
}
g<<Max<<'\n';
}
return 0;
}