Cod sursa(job #1762461)

Utilizator bogdi1bogdan bancuta bogdi1 Data 23 septembrie 2016 16:06:23
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <cstdio>
using namespace std;
int r[505][505][20];
int logx[505];
int maxx(int a, int b)
{
    if(a>b)
        return a;
    return b;
}
int maxx(int a, int b, int c, int d)
{
    return maxx(maxx(a,b), maxx(c,d));
}

int main()
{   freopen("plantatie.in", "r",stdin);
    freopen("plantatie.out", "w",stdout);
    int n,m,i,x,j,a,b,L,k,l;
    scanf("%d%d", &n, &m);
    for(i=1; i<=n; i++){
        for(j=1; j<=n; j++){
            scanf("%d", &r[i][j][0]);
            for(l=1; (1<<l)<=i && (1<<l)<=j; l++)
                r[i][j][l]=maxx(r[i][j][l-1], r[i][j-(1<<(l-1))][l-1], r[i-(1<<(l-1))][j][l-1],r[i-(1<<(l-1))][j-(1<<(l-1))][l-1]);
    }
    }
    logx[1]=0;
    for(i=2; i<=n; i++)
        logx[i]=1+logx[i/2];
    for(i=1; i<=m; i++){
        scanf("%d%d%d", &a, &b, &k);
        L=logx[k];
        printf("%d\n", maxx(maxx(maxx(r[a+(1<<L)-1][b+(1<<L)-1][L], r[a+(1<<L)-1][b+k-1][L]), r[a+k-1][b+(1<<L)-1][L]), r[a+k-1][b+k-1][L]));
    }
    return 0;
}