Cod sursa(job #2281383)

Utilizator skoda888Alexandru Robert skoda888 Data 12 noiembrie 2018 10:14:01
Problema Secv Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.56 kb

#include <iostream>
#include <fstream>
#include <set>
#include <queue>

struct Pozitie{
    int poz;
    std::set<long long>::iterator set_it;
    int lungime;
};

int main()
{
    std::ifstream in("secv.in");
    std::ofstream out("secv.out");

    ///citire
    int N;
    in >> N;

    long long Sir[N + 1];
    std::set<long long> Numere;
    for(int i = 1; i <= N; ++i){
        in >> Sir[i];
        Numere.insert(Sir[i]);
    }

    ///adaugarea pozitiilor de start in coada
    std::queue<Pozitie> Coada;
    std::set<long long>::iterator start = Numere.begin();
    for(int i = 1; i <= N; ++i){
        if(Sir[i] == *start){
            std::set<long long>::iterator tmp = start;
            //std::cout << i << ' ';
            Coada.push({i, ++tmp, 1});
        }
    }

    std::set<long long>::iterator ultimul = Numere.end();
    --ultimul;

    while(!Coada.empty()){
        Pozitie poz_curr = Coada.front();
        Coada.pop();

        if(poz_curr.poz + 1 <= N){
            if(Sir[poz_curr.poz + 1] == *poz_curr.set_it){
                if(*poz_curr.set_it == *ultimul){
                    ++poz_curr.lungime;
                    out << poz_curr.lungime;
                    return 0;
                }
                else{
                   ++poz_curr.set_it;
                }
            }
            ++poz_curr.poz;
            //std::cout << *poz_curr.set_it << ' ' << poz_curr.poz << '\n';
            ++poz_curr.lungime;
            Coada.push(poz_curr);
        }

    }
    out << -1;
    return 0;
}