Cod sursa(job #2293015)

Utilizator georgitTreista Georgiana georgit Data 30 noiembrie 2018 13:49:06
Problema Plantatie Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>
#define N 500

using namespace std;

int dp[N+5][N+5][20],logaritm[N+5];
int main()
{
    ifstream f("plantatie.in");
    ofstream g("plantatie.out");
    int n,Q;
    f>>n>>Q;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        {
            int x;
            f>>x;
            dp[i][j][0]=x;
        }
    for(int i=2;i<=n;i++)
        logaritm[i]=logaritm[i/2]+1;
    for(int k=1;(1<<k)<=n;k++)
        for(int i=1;i<=n+1-(1<<k);i++)
            for(int j=1;j<=n+1-(1<<k);j++)
            {
                int p=(1<<(k-1));
                dp[i][j][k]=max(dp[i][j][k-1],dp[i][j+p][k-1]);
                dp[i][j][k]=max(dp[i][j][k],dp[i+p][j][k-1]);
                dp[i][j][k]=max(dp[i][j][k],dp[i+p][j+p][k-1]);
            }
    for(int q=1;q<=Q;q++)
    {
        int i,j,k;
        f>>i>>j>>k;
        int log=logaritm[k];
        int sol=0;
        int dif=k-(1<<log);
        sol=max(dp[i][j][log],dp[i+dif][j][log]);
        sol=max(sol,dp[i+dif][j+dif][log]);
        sol=max(sol,dp[i][j+dif][log]);
        g<<sol<<"\n";
    }
    return 0;
}