Pagini recente » Cod sursa (job #535663) | Cod sursa (job #931407) | Cod sursa (job #3266657) | Cod sursa (job #429164) | Cod sursa (job #1896782)
#include <fstream>
#define NMAX 100003
using namespace std;
int v[NMAX], p[NMAX], sol[NMAX], i, n, cnt, poz, aux, cnt1, ans[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)
{
ans[++cnt1] = sol[aux];
aux--;
}
}
for(i=cnt1; i>=1; i--)
g<<ans[i]<<" ";
}