Cod sursa(job #1045949)

Utilizator Dayanna000Amegica Dayanna Dayanna000 Data 2 decembrie 2013 14:14:23
Problema Plantatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <fstream>
#include <iostream>
#include <cmath>
using namespace std;
int a[11][501][501];
int main()
{
    int i,j,n,m,h,k,x,y,p,maxi;
    ifstream f("plantatie.in");
    ofstream g("plantatie.out");
    f>>n>>m;
    for(i=1;i<=n;i++)
      for(j=1;j<=n;j++)
         f>>a[0][i][j];
    p=1;
    while((1<<p)<=n)
      {
          for(i=1;i<=n-(1<<p)+1;i++)
            for(j=1;j<=n-(1<<p)+1;j++)
               {
                   maxi=a[p-1][i][j];
                   if(a[p-1][i+(1<<(p-1))][j]>maxi)
                     maxi=a[p-1][i+(1<<(p-1))][j];
                   if(a[p-1][i+(1<<(p-1))][j+(1<<(p-1))]>maxi)
                     maxi=a[p-1][i+(1<<(p-1))][j+(1<<(p-1))];
                   if(a[p-1][i][j+(1<<(p-1))]>maxi)
                     maxi=a[p-1][i][j+(1<<(p-1))];
                   a[p][i][j]=maxi;
               }
            p++;
      }
    for(i=1;i<=m;i++)
      {
          f>>x>>y>>k;
          h=(int)log2(k);
          if((1<<h)==k)
            g<<a[h][x][y]<<'\n';
            else
            {
                maxi=a[h][x][y];
                maxi=max(maxi,a[h][x][y+k-(1<<h)]);
                maxi=max(maxi,a[h][x+k-(1<<h)][y]);
                maxi=max(maxi,a[h][x+k-(1<<h)][y+k-(1<<h)]);
                g<<maxi<<'\n';
            }
      }
    f.close();
    g.close();
    return 0;
}