Pagini recente » Cod sursa (job #3263674) | Cod sursa (job #48472) | Cod sursa (job #3198047) | Cod sursa (job #2418472) | Cod sursa (job #2519264)
#include <fstream>
#include <iostream>
using namespace std;
int n,i,s[100100],leg[100100],l[100100],a[100100],pozs[100100],k,st,dr,m,lmax,pozitia;
int main(int argc, const char * argv[]) {
ifstream f("scmax.in");
ofstream g("scmax.out");
f>>n;
for(i=1;i<=n;i++)
f>>a[i];
for(i=n;i>=1;i--)
{
if(a[i]<s[k]||k==0)
{
s[++k]=a[i];
pozs[k]=i;
l[i]=k;
leg[i]=pozs[k-1];
}
else
{
st=1;
dr=k;
while(st<=dr)
{
m=(st+dr)/2;
if(s[m]>a[i])
st=m+1;
else dr=m-1;
}
s[st]=a[i];
pozs[st]=i;
l[i]=st;
leg[i]=pozs[st-1];
}
}
for(i=1;i<=n;i++)
if(l[i]>lmax)
lmax=l[i],pozitia=i;
g<<lmax<<endl;
while(pozitia)
{
g<<a[pozitia]<<' ';
pozitia=leg[pozitia];
}
return 0;
}