Mai intai trebuie sa te autentifici.

Cod sursa(job #1723684)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 1 iulie 2016 13:03:04
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <cstdio>
#define MAXN 500
#define MAXLOG 9
int rmq[MAXN+1][MAXN+1][MAXLOG+1],pow[MAXN+1];
inline int getmax(int a,int b){
    if(a>b)
      return a;
    return b;
}
int main(){
    FILE*fi,*fout;
    int i,j,n,m,l,c,a,b,k,p2;
    fi=fopen("plantatie.in" ,"r");
    fout=fopen("plantatie.out" ,"w");
    fscanf(fi,"%d %d " ,&n,&m);
    for(i=1;i<=n;i++)
     for(j=1;j<=n;j++)
       fscanf(fi,"%d" ,&rmq[i][j][0]);
    pow[1]=0;
    p2=1;
    for(i=2;i<=n;i++){
        if(i>=p2*2){
          pow[i]=pow[i-1]+1;
          p2*=2;
        }
        else
          pow[i]=pow[i-1];
    }
    for(i=1;(1<<i)<=n+1;i++)
     for(l=1;l+(1<<i)<=n+1;l++)
      for(c=1;c+(1<<i)<=n+1;c++){
          a=getmax(rmq[l][c][i-1],rmq[l][c+(1<<(i-1))][i-1]);
          b=getmax(rmq[l+(1<<(i-1))][c][i-1],rmq[l+(1<<(i-1))][c+(1<<(i-1))][i-1]);
          rmq[l][c][i]=getmax(a,b);
      }
    while(m>0){
       m--;
       fscanf(fi,"%d %d %d" ,&l,&c,&k);
       a=getmax(rmq[l][c][pow[k]],rmq[l][c+k-(1<<pow[k])][pow[k]]);
       b=getmax(rmq[l+k-(1<<pow[k])][c][pow[k]],rmq[l+k-(1<<pow[k])][c+k-(1<<pow[k])][pow[k]]);
       fprintf(fout,"%d\n" ,getmax(a,b));
    }
    fclose(fi);
    fclose(fout);
    return 0;
}