Pagini recente » Cod sursa (job #885576) | Cod sursa (job #2008602) | Istoria paginii runda/floboss | Cod sursa (job #1511216) | Cod sursa (job #3172840)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int main()
{
int n, i, d, st, dr, poz, j;
fin >> n;
d = 1;
int v[n + 1], sir[n + 1], p[n + 1];
for(i = 1; i <= n; i ++)
fin >> v[i];
sir[1]=v[1];
p[1]=1;
for(i = 2; i <= n; i ++)
{
if(v[i] > sir[d]) ///pun la final;
{
d ++;
sir[d] = v[i];
p[i] = d;
}
else
{
st = 1;
dr = d;
poz = d + 1;
while(st <= dr)
{
int m = ( st + dr ) / 2;
if(sir[m] >= v[i])
{
poz = m;
dr = m - 1;
}
else
st = m + 1;
}
sir [poz] = v[i];
p[i] = poz;
}
}
fout << d << "\n";
int indici[d + 1];
j = n;
for(i = d; i >= 1; i --)
{
while( p[j] != i )
j--;
indici[i] = j;
}
for( i = 1; i <= d; i ++)
fout << v[indici[i]] << ' ';
return 0;
}