Cod sursa(job #138227)

Utilizator georgianaGane Andreea georgiana Data 17 februarie 2008 23:31:00
Problema Nivele Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <stdio.h>

#define Nmax 50001
int n,nt, niv[Nmax], urm[Nmax], prec[Nmax];

int main()
{
    freopen("nivele.in","r",stdin);
    freopen("nivele.out","w",stdout);
    scanf("%d",&nt);
    while (nt--)
          {
                scanf("%d",&n);
                for (int i=0;i<n;i++)
                    {
                         scanf("%d",&niv[i]);
                         urm[i]=i+1;
                         prec[i]=i-1;
                    }
                urm[n-1]=0;
                int arb=1, k=0;
                while (urm[0] && arb)
                {
                      while(1){
                              if (k&&!urm[k]) { arb=0; break; }
                              if (niv[k]==niv[urm[k]]) break;
                              k=urm[k];
                              }
                      if (!arb) break;
                      niv[k]--;
                      urm[k]=urm[urm[k]];
                      prec[urm[k]]=k;
                      while (k && niv[k]==niv[prec[k]])
                            {
                                  k=prec[k];
                                  niv[k]--;
                                  urm[k]=urm[urm[k]];
                                  prec[urm[k]]=k;                                
                            }
                }
                if (arb && niv[0]==1) printf("DA\n");
                else printf("NU\n");
          }
    return 0;
}