Pagini recente » Cod sursa (job #1055999) | Cod sursa (job #333113) | Cod sursa (job #250902) | Cod sursa (job #1537160) | Cod sursa (job #2784309)
#include <fstream>
using namespace std;
int v[100005], dp[100005], pozitii[100005];
int raspuns;
int caut_binar(int st, int dr, int x)
{
while(st<=dr)
{
int mij=(st+dr)/2;
if(v[pozitii[mij]]>x)
{
return caut_binar(st,mij-1,x);
}
else
{
raspuns=mij;
return caut_binar(mij+1,dr,x);
}
}
return raspuns;
}
int main()
{
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n;
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>v[i];
}
int j=0;
for(int i=1;i<=n;i++)
{
if(v[i]>v[pozitii[j]])
{
j++;
pozitii[j]=i;
dp[i]=dp[j-1]+1;
}
else
{
int anterior=caut_binar(1,j,v[i]);
pozitii[anterior+1]=i;
dp[i]=dp[anterior]+1;
}
}
fout<<dp[pozitii[j]]+1<<'\n';
for(int i=1;i<=j;i++)
{
fout<<v[pozitii[i]]<<' ';
}
return 0;
}