Pagini recente » Cod sursa (job #1425399) | Cod sursa (job #1408263) | Cod sursa (job #686814) | Cod sursa (job #187513) | Cod sursa (job #2432898)
#include <bits/stdc++.h>
using namespace std;
const int nmax=505;
int l[nmax],v[nmax][nmax],rmq[nmax][nmax][20],lg[nmax],a,b,k,n,m;
const int Lim = 10000000;
int u = Lim - 1;
char s[Lim];
void Next () {
if (++u == Lim)
std::fread(s, 1, Lim, stdin), u = 0;
}
void Get (int &x) {
x = 0;
for (; s[u] < '0' || s[u] > '9'; Next());
for (x = 0; s[u] >= '0' && s[u] <= '9'; Next())
x = x * 10 + s[u] - '0';
}
void buildrmq()
{
lg[1]=0;
for(int i=2; i<=n; i++)
lg[i]=lg[i/2]+1;
for(int i=1; i<=n; i++)
for(int j=1;j<=n;j++)
rmq[i][j][0]=v[i][j];
for(int l=1; l<=lg[n]; l++)
for(int i=1; i<=n-(1<<l)+1; i++)
for(int j=1;j<=n-(1<<l)+1;j++)
rmq[i][j][l]=max(rmq[i][j][l-1],max(rmq[i+(1<<(l-1))][j][l-1],max(rmq[i][j+(1<<(l-1))][l-1],rmq[i+(1<<(l-1))][j+(1<<(l-1))][l-1])));
}
int answerrmq(int x,int y,int k)
{
return max(rmq[x][y][lg[k]],max(rmq[x+k-(1<<(lg[k]))][y][lg[k]],max(rmq[x][y+k-(1<<(lg[k]))][lg[k]],rmq[x+k-(1<<(lg[k]))][y+k-(1<<(lg[k]))][lg[k]])));
}
int main()
{
freopen("plantatie.in","r",stdin);
freopen("plantatie.out","w",stdout);
Get(n); Get(m);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
Get(v[i][j]);
buildrmq();
for(int i=1;i<=m;i++)
{
Get(a); Get(b); Get(k);
cout<<answerrmq(a,b,k)<<"\n";
}
return 0;
}