Pagini recente » Cod sursa (job #56442) | Cod sursa (job #454592) | Cod sursa (job #787541) | Cod sursa (job #1634726) | Cod sursa (job #2855223)
#include <fstream>
#include <deque>
#include <vector>
#include <string>
#include <queue>
#include <algorithm>
#include <cstring>
#include <climits>
#define MOD 104659
using namespace std ;
ifstream cin ("scmax.in") ;
ofstream cout ("scmax.out") ;
/// 11:00
vector<int> dq, fin ;
int pozitii[100009], v[100009] ;
void recur(int poz, int f)
{
if(poz < 0 || !f)return ;
while(f && pozitii[f] != poz)
f -- ;
fin.push_back(v[f]) ;
recur(poz - 1, f - 1) ;
}
int main()
{
int n ;
cin >> n ;
for(int f = 1 ; f <= n ; f ++)
cin >> v[f] ;
for(int f = 1 ; f <= n ; f ++)
{
if(!dq.size() || v[f] > dq.back())
dq.push_back(v[f]), pozitii[f] = dq.size() - 1 ;
else
{
int poz_cb = (upper_bound(dq.begin(), dq.end(), v[f]) - dq.begin()) ;
dq[poz_cb] = v[f] ;
pozitii[f] = poz_cb ;
}
}
cout << dq.size() << endl ;
recur(dq.size() - 1, n) ;
reverse(fin.begin(), fin.end()) ;
for(int f = 0 ; f < fin.size() ; f ++)
cout << fin[f] << " " ;
return 0 ;
}