Pagini recente » Cod sursa (job #1632237) | Cod sursa (job #74392) | Cod sursa (job #389147) | Cod sursa (job #2510708) | Cod sursa (job #3149064)
#include <iostream>
#include <fstream>
#define nmax 502
#define logsize 8
using namespace std;
int rmq[nmax][nmax][logsize];///rmq[i][j][k]=elementul maxim din patratul (i,j)->(i+2^k-1,j+2^k-1)
int n,q,lg[nmax];
ifstream f("plantatie.in");
ofstream g("plantatie.out");
void compute_log()
{
lg[1]=0;
for(int i=2;i<=n;i++)
lg[i]=lg[i>>1]+1;
}
int compute_max(int a,int b,int c,int d)
{
int max1=max(a,b);
int max2=max(c,d);
return max(max1,max2);
}
void compute_rmq()
{
compute_log();
for(int k=1;k<=lg[n];k++)
{
for(int i=1;i+(1<<k)-1<=n;i++)
{
for(int j=1;j+(1<<k)-1<=n;j++)
{
rmq[i][j][k]=compute_max(rmq[i][j][k-1],rmq[i][j+(1<<(k-1))][k-1],rmq[i+(1<<(k-1))][j][k-1],rmq[i+(1<<(k-1))][j+(1<<(k-1))][k-1]);
}
}
}
}
int main()
{
f>>n>>q;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
f>>rmq[i][j][0];
}
}
compute_rmq();
for(int i=1;i<=q;i++)
{
int l,c,k,l2,c2;
f>>l>>c>>k;
l2=l+k-1;
c2=c+k-1;
g<<compute_max(rmq[l][c][lg[k]],rmq[l2-(1<<lg[k])+1][c][lg[k]],rmq[l][c2-(1<<lg[k])+1][lg[k]],rmq[l2-(1<<lg[k])+1][c2-(1<<lg[k])+1][lg[k]])<<'\n';
}
return 0;
}