Cod sursa(job #137762)

Utilizator stef2nStefan Istrate stef2n Data 17 februarie 2008 14:27:08
Problema Nivele Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
//#define _DEBUG_

#include <cstdio>
#include <vector>
#ifdef _DEBUG_
#include <iostream>
#endif
using namespace std;

const int MAX_N = 50005;

int N, level[MAX_N];
vector <int> v;

#ifdef _DEBUG_
void print()
{
    for(size_t i=0; i<v.size(); ++i)
        cerr<<v[i]<<" ";
    cerr<<endl;
}
#endif

bool solve()
{
    v.clear();
    if(level[0]>N)
        return false;
    for(int i=1; i<level[0]; ++i)
        v.push_back(i);
#ifdef _DEBUG_
    print();
#endif
    for(int i=1; i<N; ++i)
    {
        if(level[i]>N)
            return false;
        if(v.empty())
            return false;
        int tmp=v.back();
        v.pop_back();
        if(tmp>=level[i])
            return false;
        for(int j=tmp+1; j<level[i]; ++j)
            v.push_back(j);
#ifdef _DEBUG_
        print();
#endif
    }
    return v.empty();
}


int main()
{
    freopen("nivele.in", "r", stdin);
    freopen("nivele.out", "w", stdout);
    int T;
    for(scanf("%d", &T); T>0; --T)
    {
        scanf("%d", &N);
        for(int i=0; i<N; ++i)
            scanf("%d", &level[i]);
        printf("%s\n", solve()==true ? "DA" : "NU");
#ifdef _DEBUG_
        cerr<<endl;
#endif
    }
    return 0;
}