Pagini recente » Cod sursa (job #2136991) | Cod sursa (job #887250) | Cod sursa (job #2428936) | Cod sursa (job #2856927) | Cod sursa (job #2180339)
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int n,v[100005],v1[100005],v2[100005];
vector <int> sol;
int caut(int st,int dr,int val)
{
if(dr-st>=1&&v[st])
{
return dr;
}
int mij=(st+dr)/2;
if(v[mij]>val)
return caut(st,mij,val);
else
return caut(mij+1,dr,val);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
int dr=2,valCur;
scanf("%d",&v[1]);
for(int i=2;i<=n;i++)
{
scanf("%d",&v[i]);
dr=caut(0,dr,v[i]);
v1[dr]=v[i];
v2[i]=dr++;
}
int maxi=0,poz;
for(int i=1;i<=n;i++)
maxi=max(maxi,v2[i]);
printf("%d\n",maxi);
for(int i=n;i>=1;i--)
{
if(v2[i]==maxi)
{
sol.push_back(i);
maxi--;
}
}
for(int i=sol.size()-1;i>=1;i--)
printf("%d ",v[sol[i]]);
return 0;
}