Cod sursa(job #3358655)

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

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

int ans[505][505][10][10];

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

    vector<vector<int>> v(n,vector<int>(n));

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

    int p=31-__builtin_clz(n);

    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            ans[i][j][0][0]=v[i][j];

    for(int x=0;x<=p;x++){
        for(int y=0;y<=p;y++){
            if(x==0 && y==0) continue;

            for(int i=0;i+(1<<x)<=n;i++){
                for(int j=0;j+(1<<y)<=n;j++){
                    if(x==0){
                        ans[i][j][x][y]=max(
                            ans[i][j][x][y-1],
                            ans[i][j+(1<<(y-1))][x][y-1]
                        );
                    }
                    else{
                        ans[i][j][x][y]=max(
                            ans[i][j][x-1][y],
                            ans[i+(1<<(x-1))][j][x-1][y]
                        );
                    }
                }
            }
        }
    }

    while(q--){
        int a,b,l;
        fin>>a>>b>>l;
        a--;b--;

        int x=31-__builtin_clz(l);
        int y=x;

        int rez=max(
            max(ans[a][b][x][y],
                ans[a+l-(1<<x)][b][x][y]),
            max(ans[a][b+l-(1<<y)][x][y],
                ans[a+l-(1<<x)][b+l-(1<<y)][x][y])
        );

        fout<<rez<<'\n';
    }

    return 0;
}