Cod sursa(job #3330812)

Utilizator Tudor_CCTudor Cocu Tudor_CC Data 22 decembrie 2025 12:39:48
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <bits/stdc++.h>

using namespace std;

int dp[11][505][505];

int p[11];

int main()
{
    ifstream cin("plantatie.in");
    ofstream cout("plantatie.out");
    int n,m;
    cin>>n>>m;
    p[0]=1;
    for(int i=1;i<=10;++i)
    {
        p[i]=p[i-1]*2;
    }
    for(int i=1;i<=n;++i)
    {
        for(int j=1;j<=n;++j)
        {
            cin>>dp[0][i][j];
        }
    }
    for(int h=1;h<=10;++h)
    {
        for(int i=1;i+p[h]-1<=n;++i)
        {
            for(int j=1;j+p[h]-1<=n;++j)
            {
                dp[h][i][j]=max(dp[h-1][i][j],max(dp[h-1][i+p[h-1]][j],max(dp[h-1][i+p[h-1]][j+p[h-1]],dp[h-1][i][j+p[h-1]])));
            }
        }
    }
    for(int i=1;i<=m;++i)
    {
        int x,y,k,x2,y2;
        cin>>x>>y>>k;
        x2=x+k-1;
        y2=y+k-1;
        int st=0,dr=10,mij,in;
        while(st<=dr)
        {
            mij=(st+dr)/2;
            if(p[mij]<=k)
            {
                st=mij+1;
                in=mij;
            }
            else
            {
                dr=mij-1;
            }
        }
        cout<<max(dp[in][x][y],max(dp[in][x2-p[in]+1][y2-p[in]+1],max(dp[in][x2-p[in]+1][y],dp[in][x][y2-p[in]+1])))<<"\n";
    }
    return 0;
}