Cod sursa(job #19795)

Utilizator the1dragonIonita Alexandru the1dragon Data 19 februarie 2007 22:55:21
Problema Plantatie Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
// plantatie de pe infoarena

#include<stdio.h>
#include<math.h>

int n, m, a[512][512], v[32][32], len;

int main()
{
    freopen("plantatie.in", "r", stdin);
    freopen("plantatie.out", "w", stdout);
    
    int i, j, k, c, max;
    
    scanf("%d%d", &n, &m);
    for (i=1; i<=n; i++)
        for (j=1; j<=n; j++)
            scanf("%d", &a[i][j]);
    len=(int)sqrt(n);
    for (i=1; i<=len; i++)
        for (j=1; j<=len; j++)
        {
            for (max=0, k=(i-1)*len+1; k<=i*len; k++)
                for (c=(j-1)*len+1; c<=j*len; c++)
                    if (a[k][c]>max) max=a[k][c];
            v[i][j]=max;
        }
    int r, p, o, xd, xe, yd, ye; //r si p coordonatele coltului stanga sus o latura patratului
    for (k=1; k<=m; k++)
    {
        scanf("%d%d%d", &r, &p, &o);
        --o;
        max=0;
        xd=r/len+1; xe=(r+o)/len;
        yd=p/len+1; ye=(p+o)/len;
        
        for (i=xd; i<=xe; i++)
            for (j=yd; j<=ye; j++)
                if (v[i][j]>max) max=v[i][j];
        for (i=r; i<=xd*len; i++)
            for (j=p; j<=p+o; j++)
                if (a[i][j]>max) max=a[i][j];
        for (i=xe*len; i<=r+o; i++)
            for (j=p; j<=p+o; j++)
                if (a[i][j]>max) max=a[i][j];
        for (i=r; i<=r+o; i++)
            for (j=p; j<=yd*len; j++)
                if (a[i][j]>max) max=a[i][j];   
        for (i=r; i<=r+o; i++)
            for (j=ye*len; j<=p+o; j++)
                if (a[i][j]>max) max=a[i][j];
        printf("%d\n", max);                    
    }
    return 0;
}