Pagini recente » Cod sursa (job #1182104) | Cod sursa (job #2743039) | Cod sursa (job #2248853) | Cod sursa (job #3196698) | Cod sursa (job #2867092)
#include <fstream>
#include <bitset>
#include <queue>
#include <vector>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
long long j,i,n,a[100002],st,dr,mij,poz,k,d[100002],p[100002],I[100002];
int main()
{
fin>>n;
for(i=1;i<=n;i++)
fin>>a[i];
k=1;
d[k]=a[1];
p[1]=1;
for(i=2;i<=n;i++)
{
if(a[i]>d[k])
d[++k]=a[i], p[i]=k;
else
{
///caut in d cel mai mic element mai mare decat a[i]
///acel element devine a[i]
st=1; dr=k;
poz=k+1;
while(st<=dr)
{
mij=(st+dr)/2;
if(d[mij]>a[i])
dr=mij-1, poz=mij;
else
st=mij+1;
}
d[poz]=a[i];
p[i]=poz;
}
}
j=n;
fout<<k<<'\n';
for(i=k;i>=1;i--)
{
while(p[j]!=i)
j--;
I[i]=j;
}
for(i=1;i<=k;i++)
fout<<a[I[i]]<<' ';
return 0;
}