Cod sursa(job #2591952)

Utilizator beo1980Vlad Beu beo1980 Data 31 martie 2020 18:35:18
Problema Secv Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.63 kb
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(){
    
    long 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;
}