Cod sursa(job #2323608)

Utilizator DimaTCDima Trubca DimaTC Data 19 ianuarie 2019 13:50:55
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<bits/stdc++.h>
#define N 505
using namespace std;

int d[N][N][10];
int n,q;
int LOG[510];

int main() {
    ifstream cin("plantatie.in");
    ofstream cout("plantatie.out");
    cin>>n>>q;

    for (int i=1; i<=n; ++i) {
        for (int j=1; j<=n; ++j) cin>>d[i][j][0];
    }
    for (int i=2; i<=N-5; ++i) LOG[i]=LOG[i>>1]+1;

    for (int k=1; (1<<k)<=n; ++k) {
        int K=(1<<(k-1));
        for (int i=1; i<=n && i+K<=n; ++i) {
            for (int j=1; j<=n && j+K<=n; ++j) {
                    d[i][j][k]=max(max(d[i][j][k-1],d[i+K][j][k-1]), max(d[i][j+K][k-1], d[i+K][j+K][k-1]));
            }
        }
    }

    while (q--) {
        int i,j,k; cin>>i>>j>>k;
        int p=LOG[k];
        cout<<max(max(d[i][j][p], d[i+k-(1<<p)][j][p]), max(d[i][j+k-(1<<p)][p], d[i+k-(1<<p)][j+k-(1<<p)][p]))<<'\n';
    }


    return 0;
}