Cod sursa(job #3133443)

Utilizator z.catincaCatinca Zavoianu z.catinca Data 25 mai 2023 17:51:30
Problema Plantatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <iostream>
#include <fstream>
using namespace std;
const int MAX_SIZE = 510;
const int MAX_LOG = 9;
int dp[MAX_LOG][MAX_SIZE][MAX_SIZE], prec[MAX_LOG];

int main()
{

    ifstream fin("plantatie.in");
    ofstream fout("plantatie.out");
    int size, queries, idx1, idx2, idx3, len, len2;
    fin >> size >> queries;
    for (idx1 = 1; idx1 <= size; idx1++)
        for (idx2 = 1; idx2 <= size; idx2++)
            fin >> dp[0][idx1][idx2];
    for (idx1 = 2; idx1 <= size; idx1++)
        prec[idx1] = 1 + prec[(idx1 >> 1)];

    for (idx3 = 1; idx3 <= prec[size]; idx3++)
    {
        int lat = (1 << (idx3 - 1));
        for (idx1 = lat; idx1 <= size; idx1++)
            for (idx2 = lat; idx2 <= size; idx2++)
                dp[idx3][idx1][idx2] = max(max(dp[idx3 - 1][idx1][idx2], dp[idx3 - 1][idx1][idx2 - lat]), max(dp[idx3 - 1][idx1 - lat][idx2 - lat], dp[idx3 - 1][idx1 - lat][idx2]));
    }

    while (queries)
    {
        fin >> idx1 >> idx2 >> len;
        idx1 += len - 1;
        idx2 += len - 1;
        len2 = (1 << prec[len]);
        fout << max(max(dp[prec[len]][idx1 - len + len2][idx2 - len + len2], dp[prec[len]][idx1][idx2 - len + len2]), max(dp[prec[len]][idx1][idx2], dp[prec[len]][idx1 - len + len2][idx2])) << "\n";
        queries--;
    }

    fin.close();
    fout.close();
    return 0;
}