Cod sursa(job #1997387)

Utilizator nicolaefilatNicolae Filat nicolaefilat Data 4 iulie 2017 10:34:24
Problema Subsir crescator maximal Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 1.58 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <binders.h>
#define MAXN 100005

using namespace std;

ifstream in("scmax.in");
ofstream out ("scmax.out");

int N,v[MAXN],i,j,D[MAXN];


void cit(){
    in>>N;
    for(i = 0 ; i < N; i++ ){
        in>>v[i];
    }
}
void text(){
    cout<<endl<<endl;
    for(int x = 0 ; x < N; x ++){
        cout<<D[x]<<" ";
    }

}
void quickSort(int arr[], int left, int right) {
      int i = left, j = right;
      int tmp;
      int pivot = arr[(left + right) / 2];

      /* partition */
      while (i <= j) {
            while (arr[i] < pivot)
                  i++;
            while (arr[j] > pivot)
                  j--;
            if (i <= j) {
                  tmp = arr[i];
                  arr[i] = arr[j];
                  arr[j] = tmp;
                  i++;
                  j--;
            }
      };

      /* recursion */
      if (left < j)
            quickSort(arr, left, j);
      if (i < right)
            quickSort(arr, i, right);
}
void rezolvare(){
    // D - vector in care punem lungimea celei mai lungi subsecevente pana la i
    for(i = 0 ; i < N; i ++){
        D[i] = 1; //un singur element se considera ca o subsecventa
    }
    for(i = 1; i < N; i ++){
        for(j = 0 ; j < i; j ++){

            if(v[i] > v[j] && D[i] < D[j] + 1/*minim*/){
                D[i] = D[j] + 1;
            }
        }
    }
    quickSort(D,0,N-1);
    out<<D[N-1]<<"\n";


}

int main()
{
    cit();
    rezolvare();
    return 0;
}