Cod sursa(job #2863860)

Utilizator cezar.balutaCezar Baluta cezar.baluta Data 7 martie 2022 12:31:04
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
/*
                         __
                   _.--""  |
    .----.     _.-'   |/\| |.--.
    |    |__.-'   _________|  |_)  _______________
    |  .-""-.""""" ___,    `----'"))   __   .-""-.""""--._
    '-' ,--. `    |Cezar| .---.       |:.| ' ,--. `      _`.
     ( (    ) ) __|  7  |__\\|// _..-- \/ ( (    ) )--._".-.
      . `--' ;\__________________..--------. `--' ;--------'
       `-..-'                               `-..-'
*/
#include <iostream>
#include <fstream>

using namespace std;

const int N = 5e2 + 5;
const int LOG = 9;
int dp[LOG][N][N];
int log_2[N];

int main() {
    ifstream in("plantatie.in");
    ofstream out("plantatie.out");
    int n,m;
    in>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j =1;j<=n;j++){
            in>>dp[0][i][j];
        }
    }
    for(int i=2;i<=n;i++){
        log_2[i] = log_2[i/2]+1;
    }
   for(int k = 1;k<=log_2[n];k++){
       for(int i=1;i+(1<<k)-1<=n;i++){
           for(int j =1;j+(1<<k)-1<=n;j++) {
               dp[k][i][j] = max(max(dp[k-1][i][j],max(dp[k-1][i+(1<<(k-1))][j],dp[k-1][i][j+(1<<(k-1))])),dp[k-1][i+(1<<(k-1))][j+(1<<(k-1))]);
           }
       }
   }

   int i,j,k;
   while(m--){
       in>>i>>j>>k;
       int kk = log_2[k];
       out<<max(max(dp[kk][i][j],max(dp[kk][i+k-(1<<kk)][j],dp[kk][i][j+k-(1<<kk)])),dp[kk][i+k-(1<<kk)][j+k-(1<<kk)])<<'\n';
   }
    return 0;
}