Pagini recente » Cod sursa (job #1973497) | Cod sursa (job #1558066) | Cod sursa (job #2362889) | Cod sursa (job #171539) | Cod sursa (job #2617246)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int n, m;
int sparse_table[10][505][505];
int powers_of_2[31];
void powgen(){
powers_of_2[0] = 1;
for(int i = 1; i < 31; i++)
powers_of_2[i] = 2 * powers_of_2[i - 1];
}
int get_log(int x){
int s = 1, d = 31;
while(s < d){
int m = s + (d - s) / 2;
if(powers_of_2[m] <= x){
s = m + 1;
}
else{
d = m;
}
}
if(powers_of_2[d] == x)
return d;
return d - 1;
}
int maxim(int a, int b, int c, int d){
return max(a, max(b, max(c, d)));
}
int main(){
powgen();
f>>n>>m;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++){
f>>sparse_table[0][i][j];
}
int maxp = get_log(n);
for(int p = 1; p <= maxp; p++)
for(int i = 0; i < n - (1 << p) + 1; i++)
for(int j = 0; j < n - (1 << p) + 1; j++){
sparse_table[p][i][j] = maxim(sparse_table[p - 1][i][j], sparse_table[p - 1][i + (1 << (p - 1))][j], sparse_table[p - 1][i][j + (1 << (p - 1))], sparse_table[p - 1][i + (1 << (p - 1))][j + (1 << (p - 1))]);
}
int x, y, k;
int paux;
for(int i = 0; i < m; i++){
f>>x>>y>>k;
x -= 1; ///datorita identarii de la 0
y -= 1;
paux = get_log(k);
g<<maxim(sparse_table[paux][x][y], sparse_table[paux][x + k - 1 - (1 << paux) + 1][y], sparse_table[paux][x][y + k - 1 - (1 << paux) + 1], sparse_table[paux][x + k - 1 - (1 << paux) + 1][y + k - 1 - (1 << paux) + 1])<<'\n';
}
return 0;
}