Pagini recente » Borderou de evaluare (job #1442184) | Monitorul de evaluare | Cod sursa (job #3321755) | Diferente pentru problema/cbinteractiv intre reviziile 28 si 2 | Cod sursa (job #3351255)
#include <fstream>
using namespace std;
ifstream in("plantatie.in");
ofstream out("plantatie.out");
const int NMAX=5e2+5;
int n, m;
struct RMQ
{
int rmq[8][NMAX][NMAX];
void build()
{
for(int b=1;b<8;b++)
for(int i=1;i+(1<<b)-1<=n;i++)
for(int j=1;j+(1<<b)-1<=n;j++)
rmq[b][i][j]=max(max(rmq[b-1][i][j], rmq[b-1][i+(1<<(b-1))][j]), max(rmq[b-1][i][j+(1<<(b-1))], rmq[b-1][i+(1<<(b-1))][j+(1<<(b-1))]));
}
int query(int i, int j, int k)
{
int lg=31-__builtin_clz(k);
return max(max(rmq[lg][i][j], rmq[lg][i+k-(1<<lg)][j]), max(rmq[lg][i][j+k-(1<<lg)], rmq[lg][i+k-(1<<lg)][j+k-(1<<lg)]));
}
}ds;
int main()
{
in>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
in>>ds.rmq[0][i][j];
ds.build();
while(m--)
{
int i, j, k; in>>i>>j>>k;
out<<ds.query(i, j, k)<<'\n';
}
return 0;
}