Cod sursa(job #3303014)

Utilizator Andreea3425Diaconu Andreea Andreea3425 Data 12 iulie 2025 17:32:03
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

ifstream cin ("plantatie.in");
ofstream cout ("plantatie.out");

#define N 500

int v[N][N][10], v1[N+1];

void loggg(int n){
    int i;
    v1[1]=0;
    for (i=2; i<=n; i++)
        v1[i]=v1[i/2]+1;
}

void spt(int n, vector <vector <int>>& ma){
    int l,c,i,m,mi;
    for (l=0; l<n; l++)
        for (c=0; c<n; c++)
            v[l][c][0]=ma[l][c];
    for (i=1; (1<<i)<=n; i++){
        m=1<<i;
        mi=m>>1;
        for (l=0; l+m-1<n; l++)
            for (c=0; c+m-1<n; c++)
                v[l][c][i]=max(max(v[l][c][i-1], v[l+mi][c][i-1]), max(v[l][c+mi][i-1], v[l+mi][c+mi][i-1]));
    }
}

int xquery(int l, int c, int k, int n){
    int r,x=0;
    r=v1[k];
    x=max(x, v[l][c][r]);
    x=max(x, v[l][c+k -(1<<r)][r]);
    x=max(x, v[l+k-(1<<r)][c][r]);
    x=max(x, v[l+k-(1<<r)][c+k-(1<<r)][r]);
    return x;
}

int main()
{
    int n,q,l,c,i,k;
    cin >> n >> q;
    vector <vector <int>> ma(n, vector <int>(n));
    for (l=0; l<n; l++)
        for (c=0; c<n; c++)
            cin >> ma[l][c];
    loggg(n);
    spt(n, ma);
    for (i=0; i<q; i++){
        cin >> l >> c >> k;
        cout << xquery(l-1, c-1, k, n) << '\n';
    }
    return 0;
}