Cod sursa(job #1813041)

Utilizator savulescustefanSavulescu Stefan savulescustefan Data 22 noiembrie 2016 17:45:46
Problema Plantatie Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <cstdio>

using namespace std;
int i,j,k,n,m,l[504],rmq[504][504][13],Max,x,y;
int main()
{
    freopen ("plantatie.in","r",stdin);
    freopen ("plantatie.out","w",stdout);
    scanf ("%d %d", &n, &m);
    for (i=1;i<=n;i++)
        for (j=1;j<=n;j++)
        scanf ("%d", &rmq[i][j][0]);
    l[1]=0;
    for (i=2;i<=n;i++)
        l[i]=l[i/2]+1;
    for (i=1;(1<<i)<=n;i++)
        for (j=1;j<=(n-(1<<i)+1);j++)
        for (k=1;k<=(n-(1<<i)+1);k++)
        {
            Max=0;
            if (rmq[j+(1<<(i-1))][k][i-1]>rmq[j][k][i-1])
                Max=rmq[j+(1<<(i-1))][k][i-1];
            else
                Max=rmq[j][k][i-1];
            if (rmq[j][k+(1<<(i-1))][i-1]>Max)
                Max=rmq[j][k+(1<<(i-1))][i-1];
            if (rmq[j+(1<<(i-1))][k+(1<<(i-1))][i-1]>Max)
                Max=rmq[j+(1<<(i-1))][k+(1<<(i-1))][i-1];
            rmq[j][k][i]=Max;
        }
    for (i=1;i<=m;i++)
    {
        scanf ("%d %d %d", &x, &y, &k);
        if (rmq[x][y][l[k]]>rmq[x+k-(1<<l[k])][y+k-(1<<l[k])][l[k]])
            printf ("%d\n", rmq[x][y][l[k]]);
        else
            printf ("%d\n", rmq[x+k-(1<<l[k])][y+k-(1<<l[k])][l[k]]);
    }
    return 0;
}