Cod sursa(job #1800524)

Utilizator andrei_diaconu11Andrei C. Diaconu andrei_diaconu11 Data 7 noiembrie 2016 20:56:44
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <stdio.h>

int d[501][501][9], log[501];

inline int max2(int a, int b){
  return a>b ? a:b;
}

inline int max4(int a, int b, int c, int d){
  return max2(a,max2(b,max2(c,d)));
}

int main()
{
  int n, m, i, j, x, y, l, p;
  FILE *fi=fopen("plantatie.in", "r"), *fo=fopen("plantatie.out", "w");
  fscanf(fi, "%d%d", &n, &m);
  for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
      for(p=0;(1<<p)<=i;p++){
        if(p==0)
          fscanf(fi, "%d", &d[i][j][p]);
        else
          d[i][j][p]=max4(d[i-(1<<(p-1))][j][p-1],d[i-(1<<(p-1))][j-(1<<(p-1))][p-1],d[i][j-(1<<(p-1))][p-1],d[i][j][p-1]);
      }
  log[1]=0;
  for(i=2;i<=n;i++)
      log[i]=1+log[i/2];
  for(i=0;i<m;i++){
    fscanf(fi, "%d%d%d", &x, &y, &l);
    x=x+l-1;
    y=y+l-1;
    fprintf(fo, "%d\n", max4(d[x][y][log[l]],d[x-l+(1<<log[l])][y][log[l]],d[x-l+(1<<log[l])][y-l+(1<<log[l])][log[l]],d[x][y-l+(1<<log[l])][log[l]]));
  }
  fclose(fi);
  fclose(fo);
  return 0;
}