Cod sursa(job #3222678)

Utilizator SSKMFSS KMF SSKMF Data 11 aprilie 2024 11:45:31
Problema Nivele Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream>
using namespace std;

ifstream cin ("nivele.in");
ofstream cout ("nivele.out");

int sir[50001] , stiva[50001];

int main ()
{
    int numar_teste;
    for (cin >> numar_teste ; numar_teste-- ; )
    {
        int lungime;
        cin >> lungime;

        for (int indice = 1 ; indice <= lungime ; indice++)
            { cin >> sir[indice]; }
            
        bool posibil = true; 
        stiva[stiva[0] = 1] = 0;
        for (int indice = 1 , ramas = 2 ; indice <= lungime ; indice++)
        {
            while (stiva[0] && stiva[stiva[0]] == 2)
                { stiva[0]--; }
            
            if (!stiva[0])
                { posibil = false; break; }

            if (sir[indice] <= stiva[0])
                { posibil = false; break; }

            if (ramas - 1 + sir[indice] - stiva[0] - 1 > lungime - indice)
                { posibil = false; break; }

            ramas--;
            stiva[stiva[0]]++;
            while (stiva[0] + 1 < sir[indice])
                { stiva[++stiva[0]] = 1; ramas++; }
        }

        while (stiva[0] && stiva[stiva[0]] == 2)
            { stiva[0]--; }

        posibil &= (stiva[0] == 0);

        cout << (posibil ? "DA\n" : "NU\n");
    }

    cout.close(); cin.close();
    return 0;
}