Cod sursa(job #2276992)

Utilizator lucaperjuLuca Perju Verzotti lucaperju Data 5 noiembrie 2018 18:10:04
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream cin ("plantatie.in");
ofstream cout ("plantatie.out");
int v[505][505],r[10][505][505],log[505];
int main()
{
    int n,i,j,m,k,a,b,a1,a2;
    cin>>n>>m;
    for(i=1;i<=n;++i)
        for(j=1;j<=n;++j)
            cin>>v[i][j];
    log[1]=0;
    for(i=2;i<=n;++i)
        log[i]=1+log[i/2];
    for(i=0;i<=log[n]+1;++i)
    {
        for(j=1 << i;j<=n;++j)
        {
            for(k=1<<i;k<=n;++k)
            {
                if(i==0)
                    r[i][j][k]=v[j][k];
                else
                    r[i][j][k]=max(max(r[i-1][j][k],r[i-1][j-(1<<(i-1))][k-(1<<(i-1))]),max(r[i-1][j-(1<<(i-1))][k],r[i-1][j][k-(1<<(i-1))]));
            }
        }
    }
    for(i=1;i<=m;++i)
    {
        int a,b,c,a1,b1;
        cin>>a>>b>>k;
        a1=a+k-1;
        b1=b+k-1;
        k=log[k];
        cout<<max(max(r[k][a1][b1],r[k][a1][b+(1<<k)-1]),max(r[k][a+(1<<k)-1][b1],r[k][a+(1<<k)-1][b+(1<<k)-1]))<<'\n';
    }
    return 0;
}