Pagini recente » Cod sursa (job #3004273) | Cod sursa (job #629454) | Cod sursa (job #1126708) | Cod sursa (job #3185999) | Cod sursa (job #2591950)
using namespace std;
#include <vector>
#include <iostream>
#include <fstream>
#include <cmath>
#include <algorithm>
vector<long> sirInitial;
vector<long> sirSolutie;
vector<int> predecesor;
vector<long> solFinal;
vector<long> sortedVector;
int n;
int isValue(int value){
return std::binary_search(solFinal.begin(), solFinal.end(), value);
}
int main(){
int val, solMax, indexMax;
ifstream f("secv.in");
ofstream g("secv.out");
f>>n;
for(int i = 0; i<n; i++){
f>>val;
sirInitial.push_back(val);
sortedVector.push_back(val);
sirSolutie.push_back(1);
predecesor.push_back(-1);
}
std::sort(sortedVector.begin(), sortedVector.end());
int uniqueValues =1;
for(int i=1; i<n; i++)
if(sortedVector[i]!= sortedVector[i-1]) uniqueValues++;
//find longest accending sub array
indexMax = 0;
solMax = 0;
for(int i = 1; i<n; i++)
for (int j=i-1; j>=0; j--)
if ( sirInitial[i] > sirInitial[j] && sirSolutie[j]+1 > sirSolutie[i]){
sirSolutie[i] = sirSolutie[j] + 1;
predecesor[i] = j;
if (sirSolutie[i]> solMax) {
solMax = sirSolutie[i];
indexMax = i;
}
}
int currentIndex = indexMax;
int lastIndex = 0;
while(currentIndex != -1){
lastIndex = currentIndex;
currentIndex = predecesor[currentIndex];
}
// std:reverse(solFinal.begin(), solFinal.end());
int existSol = 1;
if (uniqueValues == solMax)
g<<indexMax - lastIndex + 1;
else g<<"-1";
return 0;
}