Pagini recente » Cod sursa (job #2928302) | Cod sursa (job #1066448) | Cod sursa (job #2087922) | Cod sursa (job #2942180) | Cod sursa (job #2417417)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int NMAX = 100005;
const int INF = 2000000005;
int pre[NMAX],a[NMAX],v[NMAX],r[NMAX];
int caut_bin(int nr)
{
int st=1;
int dr=NMAX-5,mij,rasp;
while(st<=dr)
{
mij=(st+dr)/2;
if(nr<=a[v[mij]])
{
dr=mij-1;
rasp=mij;
}
else st=mij+1;
}
return rasp;
}
int main()
{
int n,poz;
fin >> n;
for(int i=1;i<=n;i++) fin >> a[i];
a[n+1]=INF;
for(int i=1;i<=NMAX-4;i++) v[i]=n+1;
for(int i=1;i<=n;i++)
{
poz=caut_bin(a[i]);
v[poz]=i;
pre[i]=v[poz-1];
}
int rasp=1;
for(int i=1;i<=n+1;i++)
{
if(v[i]==n+1)
{
rasp=i-1;
break;
}
}
fout << rasp << '\n';
int ind=v[rasp];
int k=0;
while(ind!=0)
{
r[++k]=ind;
ind=pre[ind];
}
for(int i=rasp;i>=1;i--) fout << a[r[i]] << ' ';
return 0;
}