Pagini recente » Cod sursa (job #795209) | Cod sursa (job #675341) | Cod sursa (job #2724493) | Cod sursa (job #2967023) | Cod sursa (job #3222678)
#include <fstream>
using namespace std;
ifstream cin ("nivele.in");
ofstream cout ("nivele.out");
int sir[50001] , stiva[50001];
int main ()
{
int numar_teste;
for (cin >> numar_teste ; numar_teste-- ; )
{
int lungime;
cin >> lungime;
for (int indice = 1 ; indice <= lungime ; indice++)
{ cin >> sir[indice]; }
bool posibil = true;
stiva[stiva[0] = 1] = 0;
for (int indice = 1 , ramas = 2 ; indice <= lungime ; indice++)
{
while (stiva[0] && stiva[stiva[0]] == 2)
{ stiva[0]--; }
if (!stiva[0])
{ posibil = false; break; }
if (sir[indice] <= stiva[0])
{ posibil = false; break; }
if (ramas - 1 + sir[indice] - stiva[0] - 1 > lungime - indice)
{ posibil = false; break; }
ramas--;
stiva[stiva[0]]++;
while (stiva[0] + 1 < sir[indice])
{ stiva[++stiva[0]] = 1; ramas++; }
}
while (stiva[0] && stiva[stiva[0]] == 2)
{ stiva[0]--; }
posibil &= (stiva[0] == 0);
cout << (posibil ? "DA\n" : "NU\n");
}
cout.close(); cin.close();
return 0;
}