Pagini recente » Cod sursa (job #882814) | Cod sursa (job #1147485) | Cod sursa (job #1395715) | Cod sursa (job #1122442) | Cod sursa (job #284086)
Cod sursa(job #284086)
#include <fstream>
using namespace std;
int main()
{
ifstream f("nivele.in");
ofstream f2("nivele.out");
int t;
f>>t;
for(;t;--t)
{
int n;
f>>n;
long long a[50001];
int poz[50001];
f>>a[0];
long long min = a[0];
int k=-1;
for(int i=1;i<n;++i)
{
f>>a[i];
if(min > a[i]) min = a[i];
if(a[i]==a[i-1]) poz[++k] = i;
}
while (k>-1)
{
if(a[poz[k]] != a[poz[k]-1] || a[poz[k]] <= min) --k;
else
{
a[poz[k]-1]--;
//shiftleft(a,n,poz[k]); //nu trebuie pozitiile
for(int j=poz[k];j<n;++j) a[j]=a[j+1];
--n;
if(poz[k]>1 && a[poz[k]-1]==a[poz[k]-2]) poz[k]--;
else if((a[poz[k]-1] != a[poz[k]] || a[poz[k]]==min)) --k;
}
}
bool ok=1;
for(int i=1;i<n && ok;i++) if(a[i]!=a[i-1]) {f2<<"NU\n"; ok=false;}
if(ok)
{
long long pow2 = 1;
for(int i=1;i<min;i++) pow2*=2;
if(n==pow2) f2<<"DA\n";
else f2<<"NU\n";
}
}
f.close();
f2.close();
return 0;
}