Mai intai trebuie sa te autentifici.
Cod sursa(job #1554087)
Utilizator | Data | 20 decembrie 2015 21:22:57 | |
---|---|---|---|
Problema | Plantatie | Scor | 30 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.54 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int rmq[6][505][505], log[505], i, n, x, y, k, mx, p, m, j;
void constr()
{
for(i=1;(1<<i)<=n;i++)
{
for(x=1;x+(1<<i)-1<=n;x++)
{
for(y=1;y+(1<<i)-1<=n;y++)
{
mx=0;
if(mx<rmq[i-1][x][y])
mx=rmq[i-1][x][y];
if(mx<rmq[i-1][x][y+(1<<(i-1))])
mx=rmq[i-1][x][y+(1<<(i-1))];
if(mx<rmq[i-1][x+(1<<(i-1))][y])
mx=rmq[i-1][x+(1<<(i-1))][y];
if(mx<rmq[i-1][x+(1<<(i-1))][y+(1<<(i-1))])
mx=rmq[i-1][x+(1<<(i-1))][y+(1<<(i-1))];
rmq[i][x][y]=mx;
}
}
}
}
void calclog()
{
for(i=2;i<=n;i++)
log[i]=log[i/2]+1;
}
int query(int x, int y, int k)
{
p=log[k];
mx=0;
if(mx<rmq[p][x][y])
mx=rmq[p][x][y];
if(mx<rmq[p][x][y+k-(1<<p)])
mx=rmq[p][x][y+k-(1<<p)];
if(mx<rmq[p][x+k-(1<<p)][y])
mx=rmq[p][x+k-(1<<p)][y];
if(mx<rmq[p][x+k-(1<<p)][y+k-(1<<p)])
mx=rmq[p][x+k-(1<<p)][y+k-(1<<p)];
return mx;
}
int main()
{
fin>>n>>m;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
fin>>rmq[0][i][j];
}
}
calclog();
constr();
for(i=1;i<=m;i++)
{
fin>>x>>y>>k;
fout<<query(x,y,k)<<'\n';
}
return 0;
}