Pagini recente » Cod sursa (job #2307767) | Cod sursa (job #2576726) | Cod sursa (job #845622) | Cod sursa (job #650448) | Cod sursa (job #2282530)
#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;
if(N == 0){
out << -1;
return 0;
}
if(N == 1){
int x;
in >> x;
out << x;
return 0;
}
long long Sir[N + 1];
std::set<long long> Numere;
for(int i = 1; i <= N; ++i){
in >> Sir[i];
Numere.insert(Sir[i]);
}
if(Numere.size() == 1){
out << Sir[1];
return 0;
}
///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;
}