Pagini recente » Cod sursa (job #2382838) | Cod sursa (job #1521890) | Cod sursa (job #2980396) | Cod sursa (job #1684369) | Cod sursa (job #2796718)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int s[100005],v[100005],p[100005],n,l,pow=1,pos,r[100005];
int cb(int x){
int h=0,i;
for(h=pow,i=l;h>0;h>>=1){
if(i-h>0 && s[i-h]>=x)
i-=h;
}
//cout<<i<<" ";
return i;
}
int main()
{
f>>n;
while(pow<n) pow<<=1;
for(int i=1;i<=n;i++){
f>>v[i];
if(v[i]>s[l]){
s[++l]=v[i];
p[i]=l;
} else {
p[i]=cb(v[i]);
s[p[i]]=v[i];
}
}
int i=n,c=l;
while(l){
if(p[i]==l){
r[l]=v[i];
l--;
}
i--;
}
g<<c<<"\n";
for(int i=1;i<=c;i++)
g<<r[i]<<" ";
}