Pagini recente » Cod sursa (job #3312466) | Cod sursa (job #3354550) | Cod sursa (job #968428) | Cod sursa (job #1298136) | Cod sursa (job #3349701)
#include <fstream>
#include <vector>
std::ifstream fin("plantatie.in");
std::ofstream fout("plantatie.out");
using namespace std;
vector<vector<vector<int>>> RMQ;
vector<int> E;
int N,Q;
int main()
{
fin >> N >> Q;
RMQ.resize(10,vector<vector<int>>(N+1,vector<int>(N+1,0)));
E.resize(N+1,0);
for(int i = 1;i <= N; ++i)
for(int j = 1; j <= N; ++j)
fin >> RMQ[0][i][j];
int i2,j2;
for(int p = 1,lat = 2; lat <= N; p++, lat*=2)
for(int i1 = 1; i1 <= N - lat + 1; ++i1)
for(int j1 = 1; j1 <= N - lat + 1; ++j1)
{
i2 = i1 + (lat >> 1);
j2 = j1 + (lat >> 1);
RMQ[p][i1][j1] = max(RMQ[p][i1][j1],RMQ[p-1][i1][j1]);
RMQ[p][i1][j1] = max(RMQ[p][i1][j1],RMQ[p-1][i2][j1]);
RMQ[p][i1][j1] = max(RMQ[p][i1][j1],RMQ[p-1][i1][j2]);
RMQ[p][i1][j1] = max(RMQ[p][i1][j1],RMQ[p-1][i2][j2]);
}
E[1] = 0;
for(int i = 2;i <= N; ++i)
E[i] = 1 + E[i/2];
int i1,j1,k,len,L,maxim = 0;
while(Q--)
{
maxim = 0;
fin >> i1 >> j1 >> L;
k = E[L];
len = (1 << k);
i2 = i1 + L - len;
j2 = j1 + L - len;
maxim = max(maxim,RMQ[k][i1][j1]);
maxim = max(maxim,RMQ[k][i2][j1]);
maxim = max(maxim,RMQ[k][i1][j2]);
maxim = max(maxim,RMQ[k][i2][j2]);
fout << maxim << '\n';
}
}