Pagini recente » Cod sursa (job #2320772) | Cod sursa (job #492402) | Cod sursa (job #2650553) | Cod sursa (job #1985334) | Cod sursa (job #2723201)
#include <bits/stdc++.h>
#include <cstring>
# define pb push_back
#define nmax 100001
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int n,i,a[nmax],d[nmax],poz[nmax],sol[nmax],k,st,dr,mij,pozz,j,kk;
int main()
{
in>>n;
for(i=1; i<=n; i++)
in>>a[i];
k=1; d[1]=a[1];
for(i=2; i<=n; i++)
{
if(a[i]>d[k])
{
d[++k]=a[i];
poz[i]=k;
}
else
{
st=1;
dr=k; pozz=k+1;
while(st<=dr)
{
mij=(st+dr)/2;
if(d[mij]>a[i])
dr=mij-1,pozz=mij;
else
st=mij+1;
}
d[pozz]=a[i];
poz[i]=pozz;
}
}
out<<k<<"\n";
kk=k;
j=n;
while(k)
{
while(poz[j]!=k)
j--;
sol[k]=j;
k--;
}
for(i=1;i<=kk;i++)
out<<a[sol[i]]<<" ";
return 0;
}