Pagini recente » Cod sursa (job #2110364) | Cod sursa (job #1424145) | Cod sursa (job #1189949) | Cod sursa (job #1581492) | Cod sursa (job #998575)
Cod sursa(job #998575)
#include <fstream>
using namespace std;
int din[10][505][505];
int log2[505],n;
int mat[505][505];
void precalc_log()
{
int i;
log2[1]=0;
for(i=2;i<=n;i++)
log2[i]=log2[i/2]+1;
}
int maxim(int a,int b)
{
if(a>b)
return a;
return b;
}
int maxim(int a,int b,int c,int d)
{
int x=maxim(a,b);
int y=maxim(c,d);
if(x>y)
return x;
return y;
}
void precalc()
{
int i,j,k,ln=log2[n];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
din[0][i][j]=mat[i][j];
for(k=1;k<=ln;k++)
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(((i+((1<<k)-1))<n) && ((j+((1<<k)-1))<n))
{
din[k][i][j]=maxim(din[k-1][i][j],din[k-1][i][j+(1<<(k-1))],din[k-1][i+(1<<(k-1))][j],din[k-1][i+(1<<(k-1))][j+(1<<(k-1))]);
//if(i==0 && j==0 && k==1)
//{
// cout<<"da"<<endl;
// cout<<"maxim("<<din[k-1][i][j]<<' '<<din[k-1][i][j+(1<<k)]<<' '<<din[k-1][i+(1<<k)][j]<<' '<<din[k-1][i+(1<<k)][j+(1<<k)]<<endl;
// }
}
//cout<<din[k][i][j]<<' ';
}
//cout<<endl;
}
//cout<<endl<<endl;
}
}
int main()
{
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
int i,j,m,a,b,l,lg;
cin>>n>>m;
precalc_log();
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>mat[i][j];
//cout<<"INCEP\n\n\n";
precalc();
for(i=0;i<m;i++)
{
cin>>a>>b>>l;
a--;
b--;
lg=log2[l];
cout<<maxim(din[lg][a][b],din[lg][a][b+l-(1<<lg)],din[lg][a+l-(1<<lg)][b],din[lg][a+l-(1<<lg)][b+l-(1<<lg)])<<'\n';
}
cin.close();
cout.close();
return 0;
}