Pagini recente » Cod sursa (job #1901048) | Cod sursa (job #291553) | Cod sursa (job #2657240) | Cod sursa (job #2942899) | Cod sursa (job #1608759)
#include<iostream>
#include<fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int const N=100005;
int n,k,v[N],best[N],p[N],L[N];
void print(int x)
{
if(p[x]>0) print(p[x]);
out<<v[x]<<" ";
}
int caut(int x)
{
int l, r, m;
l=0;r=k;m=(l+r)/2;
while(l<=r)
{
if (v[L[m]] < x && v[L[m+1]] >= x) return m;
if (v[L[m+1]] < x)
l=m+1 , m=(l+r)/2;
else
r=m-1 , m=(l+r)/2;
}
return k;
}
int main()
{
in>>n;
for(int i=1;i<=n;i++)
in>>v[i];
k=1; best[1]=1; L[1]=1; L[0]=0;
int poz;
for(int i=2;i<=n;i++)
{
poz=caut(v[i]);
p[i]=L[poz];
best[i]=poz+1;
if(k<best[i]) k=best[i];
L[poz+1]=i;
}
int maxi=0;poz=0;
for(int i=1;i<=n;i++)
if(maxi<best[i])
maxi=best[i],poz=i;
out<<maxi<<"\n";
print(poz);
return 0;
}