Pagini recente » Cod sursa (job #1198738) | Cod sursa (job #2085768) | Cod sursa (job #30740) | Cod sursa (job #429649) | Cod sursa (job #137332)
Cod sursa(job #137332)
#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;
}