Pagini recente » Cod sursa (job #1545403) | Cod sursa (job #1738160) | Cod sursa (job #1090385) | Cod sursa (job #2833907) | Cod sursa (job #975062)
Cod sursa(job #975062)
#include<stdio.h>
#include<algorithm>
#define maxn 100005
#define maxstep 1<<18
using namespace std;
int n;
int v[maxn],best[maxn],l[maxn],p[maxn];
int pos,len;
void read()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&v[i]);
}
void print(int k)
{
if(k==0) return;
print(p[k]);
printf("%d ",v[k]);
}
void solve()
{
int i;
int step;
best[1]=1; l[1]=1; len=1;
for(i=2;i<=n;i++)
{
step=maxstep;
for(pos=0;step;step>>=1)
if(pos+step<=len && v[l[pos+step]]<v[i])
pos+=step;
best[i]=best[l[pos]]+1;
p[i]=l[pos];
if(l[best[i]]==0 || v[l[best[i]]]>v[i]) l[best[i]]=i;
len=max(len,best[i]);
}
printf("%d\n",len);
for(i=1;i<=n;i++)
if(best[i]==len) {print(i); break;}
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
read();
solve();
fclose(stdin);
fclose(stdout);
return 0;
}