Cod sursa(job #3255646)

Utilizator Andrada_MincaAndrada Minca Andrada_Minca Data 11 noiembrie 2024 17:42:47
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>
#define DIM 502
using namespace std;
int n,m,i1,i2,j11,j2,lat,L,len,k;
int r[10][DIM][DIM];
int E[DIM];
inline int maxim(int a, int b){ return (a>b ? a : b);} // de ce?
ifstream fin("plantatie.in");
ofstream fout("plantatie.out");
int main()
{
    fin>>n>>m;
    for (int i=1;i<=n;i++)
    for (int j=1;j<=n;j++) fin>>r[0][i][j];
    for (int p=1,lat=2; lat<=n; p++,lat*=2){
        for (int i1=1;i1<=n-lat+1;i1++){
            for (int j11=1;j11<=n-lat+1;j11++)
            {
                i2=i1+(lat>>1); j2=j11+(lat>>1);
                r[p][i1][j11] = max(max(r[p-1][i1][j11],r[p-1][i2][j11]),max(r[p-1][i1][j2],r[p-1][i2][j2]));
            }
        }
   }
E[1] = 0;
for (int i=2;i<=n;i++) E[i] = 1 + E[i/2];
for (;m;m--)
{
   fin>>i1>>j11>>L;
   k = E[L];
   len = (1<<k); /// cea mai mare putere de 2 <= latura
/// patratului de la interogare
   i2 = i1+L-len; j2 = j11+L-len;
   fout<<max(max(r[k][i1][j11],r[k][i1][j2]),
   max(r[k][i2][j11],r[k][i2][j2]))<<"\n";
}
return 0;
}