Pagini recente » Cod sursa (job #1813999) | Borderou de evaluare (job #1807265) | Borderou de evaluare (job #2425612) | Borderou de evaluare (job #2667732) | Cod sursa (job #2111800)
#include<fstream>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int a [100010],i,urm[100010],l[100010],lun;
int ok,st,dr,mij,n,p;
int main()
{
fin>>n;
for(i=1;i<=n;i++)
fin>>a[i];
lun=1;
l[1]=n;
urm[n]=n+1;
for(i=n-1;i>=1;i--)
{
if(a[i]<a[l[lun]])
{
lun++;
l[lun]=i;
urm[i]=l[lun-1];
}
else if (a[i]>a[l[1]])
{
l[1]=i;
urm[i]=n+1;
}
else
{
st=1;
dr=lun; ok=0;
while(st<=dr && ok==0)
{
mij=(st+dr)/2;
if(a[i]<a[l[mij]] && a[i]>=a[l[mij+1]])
{
ok=1;
l[mij+1]=i;
urm[i]=l[mij];
}
else if(a[i]>a[l[mij]])
dr=mij-1;
else
st=mij+1;
}
}
}
fout<<lun<<'\n';
p=l[lun];
while(p<=n)
{
fout<<a[p]<<' ';
p=urm[p];
}
}