Cod sursa(job #1048025)

Utilizator vlad.florescu94FMI Florescu Vlad - Adrian vlad.florescu94 Data 5 decembrie 2013 10:17:37
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include<fstream>
#include<algorithm>
#include<cmath>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int n,nr,a[501][501],m[501][501][8],i,j,l,k,r,x,y,h,kill,skill;
int maxim(int a,int b,int c, int d)
{
    int bla1,bla2;
    if(a>b) bla1=a; else bla1=b;
    if(c>d) bla2=c; else bla2=d;
    if(bla1>bla2)
        return bla1;
    return bla2;
}
int rmq(int a,int b,int k)
{
   h=log2(k);
   kill=(k-(1<<h)+1);
   skill=(k-(1<<h)+1);
   //g<<"mda: "<<"a="<<a<<"; b="<<b<<"; h="<<h<<"; kill="<<kill<<"; skill="<<skill<<"; ";
   return maxim(m[a][b][h],m[a+kill-1][b][h],m[a][b+skill-1][h],m[a+kill-1][b+skill-1][h]);
}
int main()
{
    f>>n>>nr;
    for(i=0;i<n;i++)
      for(j=0;j<n;j++)
       {
          f>>a[i][j];
          m[i][j][0]=a[i][j];
       }
 //   g<<"TEST: "<<"4 4 : "<<(4+1<<1)<<'\n';
    for(k=1;1<<k<=n;k++)
       for(i=0;i+(1<<k)-1<n;i++)
          for(j=0;j+(1<<k)-1<n;j++)
             m[i][j][k]=maxim(m[i][j][k-1],m[i][j+(1<<(k-1))][k-1],m[i+(1<<(k-1))][j][k-1],m[i+(1<<(k-1))][j+(1<<(k-1))][k-1]);

  /*  for(i=0;i<n;i++)
      {  for(j=0;j<n;j++)
            for(k=0;k<=3&&i+(1<<k)-1<n&&j+(1<<k)-1<n;k++)
              g<<a[i][j]<<"{"<<k<<"}"<<"|"<<m[i][j][k]<<"| ";
         g<<'\n';
      }  */
    for(i=1;i<=nr;i++)
    {
       f>>x>>y>>r;
       g<<rmq(x-1,y-1,r)<<'\n';
    }
 //  g<<m[0][0][3]<<" ";
   f.close();g.close();
   return 0;
}