Pagini recente » Cod sursa (job #3184994) | Cod sursa (job #2571655) | Cod sursa (job #646136) | Cod sursa (job #3137453) | Cod sursa (job #2972930)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int NMAX = 100001;
int v[NMAX], best[NMAX], rez[NMAX], father[NMAX];
int cautbin( int st, int dr, int e){
int ans = 0;
while(st <= dr){
int mid = (st + dr)/2;
if( v[best[mid]] < e ){
st = mid + 1;
ans = mid;
}
else
dr = mid-1;
}
return ans;
}
int main()
{
int n, max_best = 0;
in >> n;
for( int i = 1 ; i <= n ; i++ ){
in >> v[i];
int poz = cautbin(1, max_best, v[i])+1;
best[poz] = i;
max_best = max( poz, max_best );
father[i] = best[poz - 1];
}
out << max_best << endl;
int p = best[max_best], cnt = 0;
while(p){
rez[++cnt] = v[p];
p = father[p];
}
for( int i = cnt; i > 0 ; i-- )
out << rez[i] << " ";
return 0;
}