Pagini recente » Cod sursa (job #1632731) | Cod sursa (job #932337) | Cod sursa (job #1893302) | Cod sursa (job #1497949) | Cod sursa (job #1623713)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int in,fi,mid,p,b[100005],k,n,i,x;
struct el
{
int a,b;
}a[100005];
void afisare(int x)
{
if(a[x].b!=0)
afisare(a[x].b);
fout<<a[x].a<<" ";
}
int main()
{
fin>>n;
for(i=1;i<=n;i++)
{
fin>>a[i].a;
p=k+1;
in=1;fi=k;
while(in<=fi)
{
mid=(in+fi)/2;
if(a[b[mid]].a>a[i].a)
{
p=mid;
b[mid]=i;
fi=mid-1;
}
else
if(a[b[mid]].a==a[i].a)
{
p=0;
fi=0;
}
else
in=mid+1;
}
if(p==k+1)
{
k++;
b[k]=i;
a[i].b=b[k-1];
}
else
if(p>0)
{
b[p]=i;
a[i].b=b[p-1];
}
}
fout<<k<<"\n";
afisare(b[k]);
return 0;
}