Cod sursa(job #3243636)

Utilizator HribHrib Sloth Hrib Data 19 septembrie 2024 20:50:27
Problema Plantatie Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <bits/stdc++.h>

using namespace std;
long long rmq[58][105][105];
long long l2(long long val)
{
    return 31 - __builtin_clz(val);
}
long long p2(long long val)
{
    return (1 << val);
}
int main()
{
    //ifstream cin("plantatie.in");
    //ofstream cout("plantatie.out");
    long long n,m;
    cin>>n>>m;

    for(long long i = 0; i<n; i++)
    {
        for(long long j = 0; j<n; i++)
        {
            cin>>rmq[0][i][j];
        }
    }

    long long pwr = l2(n);
    for(long long k = 1; k<=pwr; k++)
    {
        long long pp = p2(k);
        for(long long i = 0; i + pp < n; i++)
        {
            for(long long j = 0; j + pp < n; j++)
            {
                rmq[k][i][j] = max(rmq[k - 1][i][j],max( rmq[k - 1][i + pp][j],max(rmq[k - 1][i][j + pp], rmq[k - 1][i + pp][j + pp])));
            }
        }
    }

    for(long long i = 0; i<m; i++)
    {
        long long a,b,c;
        cin>>a>>b>>c;
        a -= 1;
        b -= 1;
        c -= 1;
        long long ld = l2(c);
        long long pld = p2(ld);
        long long d = c - pld;
        cout << max(rmq[ld][a][b],max( rmq[ld][a + d][b],max( rmq[ld][a][b + d],rmq[ld][a + d][b + d])))<< endl;
    }
    return 0;
}