Pagini recente » Cod sursa (job #1210497) | Cod sursa (job #139233) | Cod sursa (job #2840855) | Cod sursa (job #1561287) | Cod sursa (job #2306418)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout("scmax.out");
int v[100001],i,n,ml[100001],rez[100001],VALMAX=2000000000,submax,lungc,lungmax[100001],lelemc,nr,j;
int cb(int val,int pozmax)
{
int st,dr,med,last;
st=1;
dr=pozmax;
last=0;
while(st<=dr)
{
med=(st+dr)/2;
if(ml[med]<val)
{
last=med;
st=med+1;
}
else dr=med-1;
}
return last;
}
int main()
{
submax=0;
fin>>n;
for(i=1; i<=n; i++)
{
fin>>v[i];
ml[i]=VALMAX+1;
}
/* memset(lungmax,1,n);
for(i=1; i<=n; i++)
for(j=1; j<i; j++)
if(v[j]<=v[i])
if(lungmax[j]+1>lungmax[i])
lungmax[i]=lungmax[j]+1;*/
for(i=1; i<=n; i++)
{
lungc=cb(v[i],submax);
if(ml[lungc+1]>v[i])ml[lungc+1]=v[i];
lungmax[i]=lungc+1;
if(lungc+1>submax)submax=lungc+1;
}
lelemc=submax;
nr=0;
for(i=n; i>=1; i--)
if(lelemc==lungmax[i])
{
rez[++nr]=v[i];
lelemc--;
}
fout<<nr<<endl;
for(i=nr; i>=1; i--) fout<<rez[i]<<' ';
return 0;
}