Pagini recente » Cod sursa (job #361891) | Cod sursa (job #735128) | Cod sursa (job #496808) | Cod sursa (job #2332563) | Cod sursa (job #3358347)
#include <fstream>
#pragma GCC optimize("O3,unroll-loops")
#include <algorithm>
#include <cstring>
#include <climits>
#include <iomanip>
#include <numeric>
#include <bitset>
#include <string>
#include <vector>
#include <cmath>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
//#define int long long
//#define int short
#define pb push_back
#define f first
#define s second
using namespace std;
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
const int nmax = 500;
const int lg = 9;
const int qmax = 75e3;
int n, m, v[nmax + 5][nmax + 5], q;
int spt[nmax + 5][nmax + 5][lg + 1];
class RMQ{
public:
RMQ(){
build();
}
int query(int i, int j, int l){
int k = __lg(l);
return max(max(spt[i][j][k],
spt[i + l - (1 << k)][j][k]),
max(spt[i][j + l - (1 << k)][k],
spt[i + l - (1 << k)][j + l - (1 << k)][k]));
}
private:
void build(){
for (int i = 1; i <= n; i++){
for (int j = 1; j <= n; j++){
spt[i][j][0] = v[i][j];
}
}
for (int k = 1; k <= lg; k++){
for (int i = 1; i <= n - (1 << k) + 1; i++){
for (int j = 1; j <= n - (1 << k) + 1; j++){
spt[i][j][k] = max(max(spt[i][j][k - 1],
spt[i + (1 << (k - 1))][j][k - 1]),
max(spt[i][j + (1 << (k - 1))][k - 1],
spt[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1]));
}
}
}
}
};
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin>>n>>q;
for (int i = 1; i <= n; i++){
for (int j = 1; j <= n; j++){
cin>>v[i][j];
}
}
RMQ table = RMQ();
while (q--){
int i, j, l;
cin>>i>>j>>l;
cout<<table.query(i, j, l)<<"\n";
}
}