Cod sursa(job #1764642)

Utilizator ivan.tudorIvan Tudor ivan.tudor Data 25 septembrie 2016 19:02:09
Problema Plantatie Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <iostream>
#include <cstdio>
using namespace std;
int r[501][501][7];
int nrlog2[501];
int maxim(int a, int b, int c, int d){
  int maximusss;
  if(a>b)
    maximusss=a;
  else
    maximusss=b;
  if(c>maximusss)
    maximusss=c;
  if(d>maximusss)
    maximusss=d;
  return maximusss;
  }
int main()
{
    int n,m,i,j,k,l,v3,raspuns;
    FILE*fin,*fout;
    fin=fopen("plantatie.in","r");
    fscanf(fin,"%d%d",&n,&m);
    nrlog2[0]=0;
    for(i=1;i<=n;i++)
      nrlog2[i]=1+nrlog2[i/2];
    for(i=1;i<=n;i++){
      for(j=1;j<=n;j++){
        fscanf(fin,"%d",&r[i][j][0]);
          for(k=1;(1<<k)<=i && (1<<k)<=j;k++){
            r[i][j][k]=maxim(r[i-(1<<(k-1))][j-(1<<(k-1))][k-1],r[i-(1<<(k-1))][j][k-1],r[i][j-(1<<(k-1))][k-1]   ,r[i][j][k-1]);
          }
      }
    }
    fout=fopen("plantatie.out","w");
    for(k=1;k<=m;k++){
      fscanf(fin,"%d%d%d",&i,&j,&v3);
      l=nrlog2[v3]-1;
      raspuns=maxim(r[i+(1<<l)-1][j+(1<<l)-1][l],r[i+(1<<l)-1][j+v3-1][l],r[i+v3-1][j+(1<<l)-1][l],r[i+v3-1][j+v3-1][l]);
      fprintf(fout,"%d\n",raspuns);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}