Pagini recente » Cod sursa (job #370404) | Cod sursa (job #1209460) | Cod sursa (job #2595253) | Cod sursa (job #2391729) | Cod sursa (job #2648369)
#include <fstream>
#include <deque>
#include <vector>
#include <bitset>
#include <queue>
#include <unordered_set>
#include <algorithm>
#include <cmath>
using namespace std ;
ifstream cin ("scmax.in") ;
ofstream cout ("scmax.out") ;
vector<int> v, p ;
int cb(int x)
{
int st = 0, dr = v.size() - 1 ;
while(st <= dr)
{
if(v[(st + dr) / 2] > x)
{
st = (st + dr) / 2 + 1 ;
}
else dr = (st + dr) / 2 - 1 ;
}
return (st + dr) / 2 ;
}
void adauga(int x) /// in v caut cel mai mare elem mai mic sau egal, in p punem pozitia din v la care am adaugat elem respectiv
{
}
int main()
{
int n ;
cin >> n ;
for(int f = 1, x ; f <= n ; f ++)
{
cin >> x ;
int mx = -1, mxf = 0 ;
for(int e = 0 ; e < v.size() ; e ++)
if(v[e] >= x)mx = max(v[e], mx) ;
if(mx == -1)
{
p.push_back(v.size()) ;
v.push_back(x) ;
}
else
{
for(int e = 0 ; e < v.size() ; e ++)
if(v[e] == mx)mxf = e ;
v[mxf] = x ;
p.push_back(mxf) ;
}
}
cout << v.size() << endl ;
vector<int> aux ;
for(int f = p.size() - 1, e = v.size() - 1 ; f >= 0 ; f --)
if(p[f] == e)aux.push_back(v[p[f]]), e -- ;
for(int f = 0 ; f < aux.size() ; f ++)
cout << aux[aux.size() - f - 1] << " " ;
return 0 ;
}