Pagini recente » Cod sursa (job #2911028) | Cod sursa (job #2554258) | Cod sursa (job #3240437) | Cod sursa (job #950201) | Cod sursa (job #1789168)
#include <fstream>
#include <algorithm>
using namespace std;
ofstream fout("scmax.out");
ifstream fin("scmax.in");
struct raspuns{
int nr, poz;
}a[100005],v[100005];
int n,x,mij,st,dr,k,ult_poz,l[100005],k1,poz;
int main()
{
fin>>n;
for(int i=1;i<=n;++i)
{
fin>>x;
a[i].nr=x;
if(i==1)
{
v[++k].nr=x;
v[k].poz=i;
a[i].poz=0;
}
else if(x>v[k].nr)
{
v[++k].nr=x;
v[k].poz=i;
a[i].poz=v[k-1].poz;
}
else
{
st=1;
dr=k;
while(st<=dr)
{
mij=(st+dr)/2;
if(x>mij)
{
st=mij+1;
}
else if(x<mij)
{
dr=mij-1;
}
else
{
dr=mij;
break;
}
}
a[i].poz=a[v[dr].poz].poz;
v[dr].nr=x;
v[dr].poz=i;
}
}
fout<<k<<'\n';
l[1]=v[k].nr;
k1=1;
poz=v[k].poz;
while(poz!=0)
{
poz=a[poz].poz;
l[++k1]=a[poz].nr;
}
for(int i=k1-1;i>=1;i--)
{
fout<<l[i]<<' ';
}
return 0;
}