Cod sursa(job #3358658)

Utilizator rhyhrrhy1Dinca Matei rhyhrrhy1 Data 19 iunie 2026 01:23:41
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <bits/stdc++.h>
#pragma GCC optimize("O3,unroll-loops")
using namespace std;

ifstream fin("plantatie.in");
ofstream fout("plantatie.out");

int a[505][505];
int dp[505][505][10];

int main(){
    int n,q;
    fin>>n>>q;

    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            fin>>a[i][j];

    int LOG=31-__builtin_clz(n);

    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            dp[i][j][0]=a[i][j];

    for(int k=1;k<=LOG;k++){
        int len=(1<<(k-1));
        for(int i=0;i+(1<<k)<=n;i++){
            for(int j=0;j+(1<<k)<=n;j++){
                dp[i][j][k]=max({
                    dp[i][j][k-1],
                    dp[i+len][j][k-1],
                    dp[i][j+len][k-1],
                    dp[i+len][j+len][k-1]
                });
            }
        }
    }

    while(q--){
        int x,y,l;
        fin>>x>>y>>l;
        x--;y--;

        int k=31-__builtin_clz(l);
        int len=(1<<k);

        int x2=x+l-len;
        int y2=y+l-len;

        int ans=max({
            dp[x][y][k],
            dp[x2][y][k],
            dp[x][y2][k],
            dp[x2][y2][k]
        });

        fout<<ans<<"\n";
    }

    return 0;
}