Pagini recente » Cod sursa (job #2105867) | Cod sursa (job #900360) | Cod sursa (job #524030) | Cod sursa (job #1041458) | Cod sursa (job #1994432)
#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;
void cit(){
in>>N;
for(i = 0 ; i < N; i++ ){
in>>v[i];
}
}
void rezolvare(){
int D[N];// 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){
D[i] = D[j] + 1;
}
}
}
out<<D[N-1]<<endl;
vector<pair<int,int> >numere;
for(i = 0 ; i < N; i ++){
numere.push_back(make_pair(D[i],v[i]));
}
vector<int>sec;
for(i = 0 ; i < N; i ++){
sec.push_back(numere[i].first);
cout<<sec[i]<<" ";
}
int counter = 1;
for(i = 0 ; i < N; i ++){
if(sec[i] == counter){
out<<numere[i].second<<" ";
counter ++;
}
}
}
int main()
{
cit();
rezolvare();
return 0;
}