Cod sursa(job #138227)
Utilizator | 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;
}