Pagini recente » Cod sursa (job #2848288) | Cod sursa (job #2535249) | Cod sursa (job #2784239) | Cod sursa (job #2047211) | Cod sursa (job #2077254)
#include <bits/stdc++.h>
using namespace std;
ifstream fi("plantatie.in");
ofstream fo("plantatie.out");
int N,M;
int LOG[600];
int A[600][600],RMQ[600][600][11];
void citire_matrice(void)
{
fi>>N>>M;
for(int i=1; i<=N; i++)
for(int j=1; j<=N; j++)
fi>>A[i][j];
}
void precalculare_log(void)
{
LOG[1]=0;
for(int i=2; i<=N; i++)
LOG[i]=LOG[i/2]+1;
}
void precalculare_tablou(void)
{
for(int i=1; i<=N; i++)
for(int j=1; j<=N; j++)
RMQ[i][j][0]=A[i][j];
/**for(int i=1; i<=N; i++)
{
for(int j=1; j<=N; j++)
fo<<RMQ[i][j][0]<<" ";
fo<<"\n";
}*/
for(int k=1; k<=LOG[N]; k++)
for(int i=1; i<=N; i++)
for(int j=1; j<=N; j++)
{
RMQ[i][j][k]=max(RMQ[i][j][k-1],RMQ[i+(1<<(k-1))][j][k-1]);
RMQ[i][j][k]=max(RMQ[i][j][k],RMQ[i][j+(1<<(k-1))][k-1]);
RMQ[i][j][k]=max(RMQ[i][j][k],RMQ[i+(1<<(k-1))][j+(1<<(k-1))][k-1]);
}
}
void rezolvare_query(void)
{
int i,j,k,range;
if(k==1)
{
fo<<A[i][j]<<"\n";
return;
}
while(M--)
{
fi>>i>>j>>k;
range=LOG[k];
fo<<max(RMQ[i][j][range],max(RMQ[i+k-(1<<range)][j][range],max(RMQ[i][j+k-(1<<range)][range],RMQ[i+k-(1<<range)][j+k-(1<<range)][range])));
fo<<"\n";
}
}
int main()
{
citire_matrice();
precalculare_log();
precalculare_tablou();
rezolvare_query();
/**for(int i=1; i<=N; i++)
{
for(int j=1; j<=N; j++)
{
fo<<RMQ[i][j][1]<<" ";
}
fo<<"\n";
}*/
fi.close();
fo.close();
return 0;
}