Cod sursa(job #137332)

Utilizator mariusdrgdragus marius mariusdrg Data 17 februarie 2008 11:17:21
Problema Nivele Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 4, Clasele 11-12 Marime 1.83 kb
#include<stdio.h>
#include<set>
#define is insert
using namespace std;

const int maxn = 100000;
int st[maxn],dr[maxn];
int niv[maxn];
int nrt,N,i;


struct lstr
{
        bool operator()(const int i,const int j)
        {
                return niv[i] > niv[j] || (niv[i] == niv[j] && i < j);
        }

};

set <int,lstr> s;

int main()
{
        freopen("nivele.in","r",stdin);
        freopen("nivele.out","w",stdout);
        scanf("%d",&nrt);
        for(;nrt;--nrt)
        {
                memset(niv,0,sizeof(niv));
                scanf("%d",&N);
                for(i = 1;i <= N; ++i)
                {
                        scanf("%d",&niv[i]);
                        dr[i] = i + 1;
                        s.is(i);
                }
                int nrnod = N - 1;
                bool ver = 1;
                while(nrnod)
                {
                        --nrnod;
                        set <int,lstr> :: iterator it;
                        it = s.begin();
                        int nod = *it;
                        ++it;
                        int nod2 = *it;
                        s.erase(s.find(nod));
                        s.erase(s.find(nod2));
                        if (niv[nod] != niv[nod2] || dr[nod] != nod2)
                        {
                                ver = 0;
                                printf("NU\n");
                                break;
                        }
                        dr[nod] = dr[nod2];
                        niv[nod]--;
                        s.insert(nod);
                }
                if (ver && niv[1] == 1)
                {
                        printf("DA\n");
                }
                else
                {
                        if (ver)printf("NU\n");
                }
                s.clear();
                
        }

        return 0;

}