Pagini recente » Cod sursa (job #1312622) | Cod sursa (job #1435859) | Cod sursa (job #48785) | Cod sursa (job #2697911) | Cod sursa (job #1310404)
#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("plantatie.in");
ofstream g("plantatie.out");
int n,Q,i,j,m[NMAX][NMAX],rmq[10][NMAX][NMAX],x,y,k,maxi,doi[NMAX],t1,t2;
void constructRMQ(int l)
{
int i,j;
for (i=1;i<=n;++i)
rmq[0][l][i]=m[l][i];
for (i=1;i<=9;++i)
for(j=1;j<=n-(1<<(i-1))+1;++j)
rmq[i][l][j] = max ( rmq[i-1][l][j] , rmq[i-1][l][j + (1 << (i-1))] );
}
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;
if (1<<d==i)
d++;;
}
for (i=1;i<=n;++i)
{
constructRMQ(i);
}
while(Q--)
{
f>>x>>y>>k;
maxi=-1<<31;
for (i=x;i<=x+k-1;++i)
{
t1=rmq[doi[k]-1][i][y];
t2=rmq[doi[k]-1][i][k+y-(1<<(doi[k]-1))];
maxi=max(maxi,max(t1,t2));
}
g<<maxi<<'\n';
}
return 0;
}