Cod sursa(job #2794671)

Utilizator RobertAcAcatrinei Robert-Marian RobertAc Data 5 noiembrie 2021 11:43:42
Problema Plantatie Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <bits/stdc++.h>
#define nmax 505
using namespace std;
string prob="plantatie";
ifstream in(prob+".in");
ofstream out(prob+".out");
int lg[32], rmq[32][nmax][nmax];
int n,m;
void dolg(){
    for(int i=2;i<=nmax;i++)lg[i]=lg[i/2]+1;
}
void input(){
    in>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            in>>rmq[0][i][j];
        }
    }
}
void dormq(){
    for(int i=1;(1<<i)<=n;i++){
        for(int x=1;x+(1<<i)-1<=n;x++){
            for(int y=1;y+(1<<i)-1<=n;y++){
                int s=1<<(i-1);
                rmq[i][x][y]=max(
                    max(rmq[i-1][x][y],
                        rmq[i-1][x+s][y]),
                    max(rmq[i-1][x][y+s],
                        rmq[i-1][x+s][y+s]));
            }
        }
    }
}
void doqueries(){
    int x,y,k;
    while(in>>x>>y>>k){
        int s=(1<<lg[k]);
        out<<max(
                 max(rmq[lg[k]][x][y],
                     rmq[lg[k]][x+k-s][y]),
                 max(rmq[lg[k]][x][y+k-s],
                     rmq[lg[k]][x+k-s][y+k-s]))<<'\n';
    }
}
int main(){
    dolg();
    input();
    dormq();
    doqueries();
}