Cod sursa(job #2755147)

Utilizator StefaniaCriStefania Cristea StefaniaCri Data 26 mai 2021 20:19:02
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("plantatie.in");
ofstream g("plantatie.out");

const int NMAX=501;
long int rmq[11][NMAX][NMAX];
long int n,m;

int max4(int a, int b, int c, int d)
{
    return max(max(a,b),max(c,d));
}


void precalc()
{
    for (int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
		f>>rmq[0][i][j];

    long int l;
	for (int i=1; (1 << i) <=n;i++)
		for (int j=1;j <= n - (1 << i)+1;j++)
            for(int k=1;k<=n-(1<<i)+1;k++)
		{
		l=1<<(i-1);
		rmq[i][j][k]= max4( rmq[i-1][j][k] ,
                      rmq[i-1][j][k+l],
                      rmq[i-1][j+l][k],
                      rmq[i-1][j+l][k+l] );
		}
}

int query(int x,int  y, int k)
{   int m=0;
    while(1<<(m+1)<=k)
         m++;
    int l=1<<m;
     return max4(rmq[m][x][y],
                 rmq[m][x][y+k-l]
                 ,rmq[m][x+k-l][y],
                 rmq[m][x+k-l][y+k-l]);
}

int main()
{
	f>>n>>m;
    precalc();
    int x,y,k;
	for (int i=1;i<=m;i++)
	{
		f>>x>>y>>k;
        g<<query(x,y,k)<<'\n';
	}
	return 0;
}