Pagini recente » Cod sursa (job #2425694) | Cod sursa (job #2197732) | simulare-oji-23-02-2024-clasaxi | Cod sursa (job #1384557) | Cod sursa (job #1255938)
#include <cstdio>
using namespace std;
int a[100001],n,m,q[100001],i,poz[100001],b=0,u[100001];
int cautbin (int x)
{
int st=1,dr=m,POZ=0,mij;
mij=(st+dr)/2;
while (st<=dr && POZ==0)
{
mij=(st+dr)/2;
if (q[mij]==x) POZ=mij;
else if (q[mij]<x) st=mij+1;
else dr=mij-1;
}
if (POZ==0) return st;
return POZ;
}
int main ()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for (i=1; i<=n; i++)
scanf("%d",&a[i]);
q[1]=a[1];
poz[1]=1;
m=1;
for (i=2; i<=n; i++)
{
poz[i]=cautbin(a[i]);
q[poz[i]]=a[i];
if(poz[i]>m) m++;
}
for (i=n; i>=1; i--)
if(poz[i]==m)
{
u[++b]=a[i];
m--;
}
for (i=b; i>=1; i--)
printf("%d ",u[i]);
return 0;
}