Pagini recente » Cod sursa (job #2472377) | Cod sursa (job #1324602) | Cod sursa (job #2184106) | Cod sursa (job #1198788) | Cod sursa (job #1896805)
#include <fstream>
#define NMAX 100003
using namespace std;
int v[NMAX], p[NMAX], sol[NMAX], i, n, cnt, poz, aux, cnt1, ap[NMAX];
ifstream f("scmax.in");
ofstream g("scmax.out");
int cautbin(int a)
{
int step = 1;
int start = 0;
for(; step<cnt; step<<=1);
for(;step;step>>=1)
{
int index = start + step;
if(index > cnt)
continue;
if(sol[index] < a)
start = index;
}
return start;
}
int main()
{
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
p[1] = cnt = 1;
sol[1] = v[1];
for(i=2;i<=n;i++)
{
poz = cautbin(v[i]) + 1;
if(poz > cnt)
cnt++;
sol[poz] = v[i];
p[i] = poz;
}
g<<cnt<<"\n";
aux = cnt;
for(i=n; i>=1; i--)
{
if(p[i] == aux && !ap[aux])
{
ap[aux] = v[i];
aux--;
}
}
for(i=1; i<=n; i++)
{
if(ap[i])
g<<ap[i]<<" ";
}
}