Cod sursa(job #2977939)

Utilizator degoCozma Diego dego Data 12 februarie 2023 17:40:06
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");
int n,m,a[502],r[10][1000][1000];
void constr()
{
   int lat=2,p;
   for(p=1;lat<=n;p++,lat=lat*2)
   {
       for(int i1=1;i1<=n-lat+1;i1++)
       {
           for(int j1=1;j1<=n-lat+1;j1++)
           {
               int i2=i1+lat/2;
               int j2=j1+lat/2;
               r[p][i1][j1]=max(r[p-1][i1][j1],max(r[p-1][i2][j1],max(r[p-1][i1][j2],r[p-1][i2][j2])));
           }
       }
   }
}
int qu(int i,int j,int l)
{
    int k=a[l];
    int len=(1<<k);
    int i2=i+l-len;
    int j2=j+l-len;
    return max(max(r[k][i][j],r[k][i2][j2]),max(r[k][i][j2],r[k][i2][j]));
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    f>>n>>m;
    int i,j;
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        f>>r[0][i][j];
    constr();
    a[1]=0;
    for(i=2;i<=n;i++)
        a[i]=1+a[i/2];
    while(m)
    {
        int l;
        f>>i>>j>>l;
        g<<qu(i,j,l)<<'\n';
        m--;
    }
    return 0;
}