Pagini recente » Cod sursa (job #3216491) | Cod sursa (job #2379043) | Cod sursa (job #98447) | Cod sursa (job #711006) | Cod sursa (job #2418100)
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 100000;
int v[N+5],poz[N+5],sol[N+5],vinit[N+5];
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int n,i,Max=0,nr,r,pas;
scanf("%d",&n);
for(i=1;i<=n;i++){
cin>>nr;
vinit[i] = nr;
r = 0;
pas = 1<<10;
while(pas){
if(r+pas <= Max && sol[r+pas] < nr)
r+=pas;
pas >>= 1;
}
r++;
if(r > Max)
sol[++Max] = nr;
else
sol[r] = nr;
poz[i] = r;
}
printf("%d\n",Max);
for(i=n;i>=1;i--){
if(poz[i] == Max){
v[Max] = vinit[i];
Max--;
v[0]++;
}
}
for(i=1;i<=v[0];i++)
printf("%d ",v[i]);
return 0;
}