Pagini recente » Cod sursa (job #596867) | Cod sursa (job #954055) | Cod sursa (job #2428179) | Cod sursa (job #1112999) | Cod sursa (job #1310493)
#include <iostream>
#include <vector>
#include <cmath>
#include <ctime>
#include <cstdio>
#include <queue>
#include <set>
#include <map>
#include <fstream>
#include <cstdlib>
#include <string>
#include <cstring>
#include <algorithm>
#include <numeric>
#define ll long long int
#define punct pair<ll,ll>
#define mp make_pair
#define MOD 10000007
#define NMAX 505
using namespace std;
ifstream f(".in");
ofstream g(".out");
int n,Q,i,j,m[NMAX][NMAX],rmq[10][NMAX][NMAX],x,y,k,maxi,doi[NMAX],t1,t2,t3,t4,t;
void constructRMQ()
{
int i,j,k,p1,p2,p3,p4;
for (i=1;i<=n;++i)
for (j=1;j<=n;++j)
rmq[0][i][j]=m[i][j];
for (k=0;k<9;++k)
for (i=1;i<=n-(1<<k)+1;++i)
for (j=1;j<=n-(1<<k)+1;++j)
{
t=(1<<doi[k+2]);
p1=rmq[k][i][j];
p2=rmq[k][i][j+t];
p3=rmq[k][i+t][j];
p4=rmq[k][i+t][j+t];
rmq[k+1][i][j]=max(max(p1,p2),max(p3,p4));///max(p1,max(p2,max(p3,p4)))
}
}
int main()
{
f>>n>>Q;
for (i=1;i<=n;++i)
for (j=1;j<=n;++j)
f>>m[i][j];
int d=1;
for (i=1;i<=n;++i)
{
doi[i]=d-1;
if (1<<d==i)
d++;;
}
constructRMQ();
/*for(i=1;i<=n;++i,g<<'\n')
for(j=1;j<=n;++j)
g<<rmq[2][i][j]<<" ";*/
while(Q--)
{
f>>x>>y>>k;
t=k-(1<<(doi[k]));
t1=rmq[doi[k]][x][y];
t2=rmq[doi[k]][x][y+t];
t3=rmq[doi[k]][x+t][y];
t4=rmq[doi[k]][x+t][y+t];
maxi=max(max(t1,t2),max(t3,t4));
g<<maxi<<'\n';
}
return 0;
}