Pagini recente » Cod sursa (job #2562788) | Cod sursa (job #1440478) | Cod sursa (job #829804) | Cod sursa (job #2500504) | Cod sursa (job #2973587)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("plantatie.in");
ofstream fout ("plantatie.out");
const int MAX_N = 500;
int n, pw2[10], lg2[MAX_N + 5];
int mat[MAX_N + 5][MAX_N + 5], rmq[10][MAX_N + 5][MAX_N + 5];
const int MAX_Q = 75000;
int q, l, r, len;
static inline int query(){
int ll = l+len-1;
int rr = r+len-1;
int lg = lg2[ll-l+1];
ll -= pw2[lg] - 1;
rr -= pw2[lg] - 1;
return max({rmq[lg][l][r], rmq[lg][ll][r], rmq[lg][l][rr], rmq[lg][ll][rr]});
}
int main (){
ios_base::sync_with_stdio(false);
fin.tie(nullptr), fout.tie(nullptr);
fin>>n>>q;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++){
fin>>mat[i][j];
rmq[0][i][j] = mat[i][j];
}
lg2[0] = lg2[1] = 0;
for(int i=2; i<=n; i++)
lg2[i] = lg2[(i >> 1)] + 1;
pw2[0] = 1;
for(int i=1; i<=lg2[n]; i++)
pw2[i] = (pw2[i-1] << 1);
for(int lg=1; lg<=lg2[n]; lg++)
for(int i=1, ii; (ii = i + pw2[lg-1])<=n; i++)
for(int j=1, jj; (jj = j + pw2[lg-1])<=n; j++)
rmq[lg][i][j] = max({rmq[lg-1][i][j], rmq[lg-1][ii][j], rmq[lg-1][i][jj], rmq[lg-1][ii][jj]});
while(q--){
fin>>l>>r>>len;
fout<<query()<<"\n";
}
return 0;
}
/**
**/