Pagini recente » Cod sursa (job #2391527) | Cod sursa (job #1014106) | Cod sursa (job #2575357) | Cod sursa (job #38732) | Cod sursa (job #2967955)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,a[100001],dp[100001],tata[100001],k;
void afisare(int k)
{
if(k>0)
{
afisare(tata[k]);
fout<<a[k]<<" ";
}
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
fin>>a[i];
for(int i=1;i<=n;i++)
{
int st=1,dr=k,mid=0,poz=0;
while(st<=dr)
{
mid=(st+dr)/2;
if(a[dp[mid]]>=a[i])
{
dr=mid-1;
}
else
{
poz=mid;
st=mid+1;
}
}
if(poz==k)
{
k++;
dp[k]=i;
tata[i]=dp[poz];
}
else
{
dp[poz+1]=i;
tata[i]=dp[poz];
}
}
fout<<k<<"\n";
afisare(dp[k]);
return 0;
}