Pagini recente » Cod sursa (job #1506085) | Cod sursa (job #381086) | Cod sursa (job #229180) | Cod sursa (job #1506916) | Cod sursa (job #534462)
Cod sursa(job #534462)
#include <cstdio>
#include <list>
using namespace std;
#define NMAX 50050
bool ok;
char S[3 * NMAX], *p;
int A[2 * NMAX], N, t, n, i, x, fr;
list <int> L;
int main () {
freopen ("nivele.in", "r", stdin);
freopen ("nivele.out", "w", stdout);
scanf ("%d", &t);
while (t--) {
memset (A, 0, sizeof (A));
scanf ("%d ", &n);
fgets (S, 3 * NMAX, stdin); p = S;
N = 1, A[1] = 1, fr = 1, ok = 1;
for (i = 1; i <= n; i++, p++) {
x = 0;
while (*p >= '0' && *p <= '9')
x = x * 10 + (*p - '0'), p++;
while (A[fr] < x) {
N++;
if (N > n) break;
A[fr << 1] = A[(fr << 1) + 1] = A[fr] + 1;
L.push_front ((fr << 1) + 1), L.push_front (fr << 1);
fr = L.front (), L.pop_front ();
}
if (A[fr] > x || N > n) {
ok = 0;
break;
}
if (A[fr] == x)
if (!L.empty ()) fr = L.front (), L.pop_front ();
}
if (ok) printf ("DA\n");
else printf ("NU\n");
}
return 0;
}