CCCPaste

Bitona Simulare CNVA

#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;
}