Pagini recente » Cod sursa (job #1146244) | Cod sursa (job #2174750) | Cod sursa (job #1901845) | Cod sursa (job #2817355) | Cod sursa (job #2754097)
#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;
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];
}
}
I=0;
putere_2=2;
while(putere_2<=n){
I++;
for(int i=1;i<=n-putere_2/2;i++){
for(int j=1;j<=n-putere_2/2;j++){
rmq[I][i][j]=max(rmq[I-1][i][j],max(rmq[I-1][i+putere_2/2][j],max(rmq[I-1][i][j+putere_2/2],rmq[I-1][i+putere_2/2][j+putere_2/2])));
}
}
for(int i=n-putere_2/2+1;i<=n;i++){
for(int j=n-putere_2/2+1;j<=n;j++){
rmq[I][i][j]=rmq[I-1][i][j];
}
}
putere_2=putere_2*2;
}
for(int i=1;i<=m;i++){
f>>a>>b>>l;
putere_2=1;
I=0;
while(putere_2*2<=l){
putere_2=putere_2*2;
I++;
}
Max=rmq[I][a][b];
l=l-putere_2;
poz=putere_2+1;
while(l>0){
putere_2=1;
I=0;
while(putere_2*2<=l){
putere_2=putere_2*2;
I++;
}
for(int p=a;p<=a+poz-1;p=p+putere_2){
Max=max(Max,rmq[I][p][b+poz-1]);
}
for(int j=b;j<=b+poz-1;j=j+putere_2){
Max=max(Max,rmq[I][a+poz-1][j]);
}
l=l-putere_2;
poz=poz+putere_2;
}
g<<Max<<'\n';
}
/*
cout<<endl;
for(int I=0;I<=3;I++){
cout<<"Patrate de marimea 2 la puterea "<<I<<endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<rmq[I][i][j]<<" ";
}
cout<<endl;
}
cout<<endl<<endl;
}
*/
return 0;
}