Cod sursa(job #139155)

Utilizator filipbFilip Cristian Buruiana filipb Data 19 februarie 2008 19:34:07
Problema Nivele Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <stdio.h>

#define NMax 50005

int T, N, lev[NMax], ql;
short int fii[NMax];

int main(void)
{
    int i, ok;
    
    freopen("nivele.in", "r", stdin);
    freopen("nivele.out", "w", stdout);

    for (scanf("%d", &T); T; T--)
    {
        scanf("%d", &N);
        for (i = 1; i <= N; i++)
            scanf("%d", &lev[i]);

        for (i = 1; i <= N; i++)
            if (lev[i] > N)
                break;
            
        if (i <= N && lev[i] > N)
        {
            printf("NU\n");
            continue;
        }

        fii[ql = 1] = 0;
        for (i = 1, ok = 1; i <= N && ok; i++)
            if (lev[i] > ql)
            {
                ++fii[ql];
                for (++ql; lev[i] > ql; ++ql)
                    fii[ql] = 1;
                --ql;
                for (; fii[ql] == 2; --ql);
            }
            else if (lev[i] < ql)
            {
                for (; lev[i] < ql && ok; --ql)
                    if (fii[ql] == 1)
                        ok = 0;
                ++ql;
            }
        for (i = 1; i <= ql && ok; i++)
            ok = (fii[i] == 2);
            
        if (ok)
            printf("DA\n");
        else
            printf("NU\n");
    }

    return 0;
}