Cod sursa(job #2851117)

Utilizator NutaAlexandruASN49K NutaAlexandru Data 18 februarie 2022 09:40:15
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>
using namespace std;
int rmq[501][501][11],lg[501];
ifstream cin("plantatie.in");
ofstream cout("plantatie.out");
int main()
{
    int n,q;
    cin>>n>>q;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            cin>>rmq[j][i][0];
        }
    }
    for(int k=1;(1<<k)<=n;k++)
    {
        int l=(1<<(k-1));
        for(int i=1;i+l<=n;i++)
        {
            for(int j=1;j+l<=n;j++)
            {
                int l2=(1<<(k-1));
                rmq[j][i][k]=max(max(rmq[j][i][k-1],rmq[j+l2][i][k-1]) , max(rmq[j][i+l2][k-1],rmq[j+l2][i+l2][k-1]));
            }
        }
    }

    for(int i=2;i<=n;i++)
    {
        lg[i]=lg[(i>>1)]+1;
    }
    while(q--)
    {
        int x,y,k;
        cin>>y>>x>>k;
        int l=lg[k];
        int xx=x+k-(1<<l);
        int yy=y+k-(1<<l);
        cout<<max(  max(rmq[x][y][l], rmq[x][yy][l])  ,    max(rmq[xx][y][l],rmq[xx][yy][l]))<<'\n';
    }
    return 0;
}