Cod sursa(job #2586391)

Utilizator SergiuS3003Sergiu Stancu Nicolae SergiuS3003 Data 20 martie 2020 19:41:32
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ( "plantatie.in" );
ofstream g ( "plantatie.out" );
int rmq[10][502][502], a[502][502], p[502];
int main()
{
    int N, Q;
    f >> N >> Q;

    for ( int i = 1; i <= N; i++ )
        for ( int j = 1; j <= N; j++ )
        {
            f >> a[i][j];
            rmq[0][i][j] = a[i][j];
        }

    for ( int i = 2; i <= N; i++ )
        p[i] = p[i / 2] + 1;

    for ( int i = 1; ( 1 << i ) <= N; i++ )
    {
        int l = ( 1 << ( i - 1 ) ), mx = N - 2 * l + 1;

        for ( int j = 1; j <= mx; j++ )
            for ( int k = 1; k <= mx; k++ )
                rmq[i][j][k] = max ( max ( rmq[i - 1][j][k], rmq[i - 1][j][k + l] ), max ( rmq[i - 1][j + l][k], rmq[i - 1][j + l][k + l] ) );
    }

    int l, c, lg;

    while ( Q-- )
    {
        f >> l >> c >> lg;
        int pu = p[lg];
        int dif = lg - ( 1 << pu );
        g << max ( max ( rmq[pu][l][c], rmq[pu][l + dif][c] ), max ( rmq[pu][l][c + dif], rmq[pu][l + dif][c + dif] ) ) << '\n';
    }

    return 0;
}