Cod sursa(job #1775561)

Utilizator andy1207Cioltan Andrei andy1207 Data 10 octombrie 2016 16:02:14
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.63 kb
#include<cstdio>
int a[501][501];
int r[501][501][9];//log2 de 500=9;
int log[250001];
int main()
{
 int n,m,i,j,k,f,l,q,i1,i2,j1,j2;
 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",&r[i][j][0]);
        }
    }
 for(i=1;i<=n;i++)
    {
     for(j=1;j<=n;j++)
        {
         for(k=1;(1<<k)<=i && (1<<k)<=j;k++)
            {
             r[i][j][k]=r[i][j][k-1];
             if(r[i][j][k]<r[i][j-(1<<(k-1))][k-1])
                r[i][j][k]=r[i][j-(1<<(k-1))][k-1];
             if(r[i][j][k]<r[i-(1<<(k-1))][j][k-1])
                r[i][j][k]=r[i-(1<<(k-1))][j][k-1];
             if(r[i][j][k]<r[i-(1<<(k-1))][j-(1<<(k-1))][k-1])
                r[i][j][k]=r[i-(1<<(k-1))][j-(1<<(k-1))][k-1];
            }
        }
    }
 log[1]=0;
 for(i=2;i<=n*n;i++)
    {
     log[i]=1+log[i/2];
    }
 for(f=1;f<=m;f++)
    {
     scanf("%d%d%d",&i,&j,&k);
     i1=i;
     j1=j;
     i2=i+k-1;
     j2=j+k-1;
     l=log[k];
     q=r[i2][j2][l];//dr jos
     if(q<r[i2][j1+(1<<l)-1][l])//st jos
        q=r[i2][j1+(1<<l)-1][l];
     if(q<r[i1+(1<<l)-1][j2][l])//dr sus
        q=r[i1+(1<<l)-1][j2][l];
     if(q<r[i1+(1<<l)-1][j1+(1<<l)-1][l])//st sus
        q=r[i1+(1<<l)-1][j1+(1<<l)-1][l];
     printf("%d\n",q);
     /*l=log[k];
     q=r[ci][cj][l];
     if(q<r[ci][cj-(1<<(l-1))][l])
        q=r[ci][cj-(1<<(k-1))][k-1];
     if(q<r[ci-(1<<(k-1))][cj][k-1])
        q=r[ci-(1<<(k-1))][cj][k-1];
     if(q<r[ci-(1<<(k-1))][cj-(1<<(k-1))][k-1])
        q=r[ci-(1<<(k-1))][cj-(1<<(k-1))][k-1];
     printf("%d\n",q);*/
    }
return 0;
}