#include using namespace std; ifstream cin("bitona.in"); ofstream cout("bitona.out"); /// crestere ... scadere /// Cazul 1 : secventa este bitona din start /// Cazul 2 : secventa este strict crescatoare -> rotim la stanga odata. /// Cazul 3 : secventa este strict descrescatoare -> rotim la dreapta odata. /// Cazul 4 : sa luam exemplul /// 6 4 3 6 8 10 19 9 (initial) // 3 6 8 10 19 9 6 4 -> // daca secventa este la inceput descrescatoare trebuie verificat // ca primul element sa fie mai mic decat ultimul. /// mai este si cazul invers in care secventa este la inceput crescatoare // si atunci o putem face bitona daca primul element este mai mare decat ultimul int main() { bool cresc = true, descresc = true; int initDir = 0, currentDir = 0, prevDir = 0, nrschimbari = 0; int n, prev, current, primul, ultimul ; cin >> n; if(n == 1) return false; if(n == 2) return true; // Acum n>=3 cin >> primul ; prev = primul; for(int i = 2;i<=n;i++) { cin >> current; ultimul = current; if(current > prev) descresc = false , currentDir = 1 ; if(current < prev) cresc = false, currentDir = -1; if(prevDir != currentDir) nrschimbari++; if(nrschimbari == 1) initDir = currentDir; prevDir= currentDir; prev = current; } if(cresc || descresc) cout << "DA\n"; else if(initDir == 1 && nrschimbari == 2) cout << "DA\n"; else if(initDir == -1 && nrschimbari == 3 && primul <= ultimul) cout << "DA\n"; else if(initDir == 1 && nrschimbari == 3 && ultimul <= primul) cout << "DA\n"; else cout << "NU\n"; return 0; }