Pagini recente » Cod sursa (job #462618) | Cod sursa (job #1176094) | Cod sursa (job #3228732) | Cod sursa (job #3036602) | Cod sursa (job #2721760)
#include <bits/stdc++.h>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
long long v[100100],sol[100100];
void recons(long long indice, long long lungime, long long maxim)
{
for(long long j=indice;j>=1;j--)
{
if(sol[j]==lungime && v[j]<maxim)
{
recons(j-1,lungime-1,v[j]);
g<<v[j]<<" ";
break;
}
}
}
long long n,i,t,p,u,mij,poz,l[100100];
int main()
{
f>>n;
for(i=1;i<=n;i++)f>>v[i];
t=1;l[1]=v[1];
for(i=2;i<=n;i++)
{
if(v[i]>l[t])t++,l[t]=v[i],sol[i]=t;
else
{
p=1;u=t;
while(p<=u)
{
mij=(p+u)/2;
if(l[mij]>=v[i])poz=mij,u=mij-1;
else p=mij+1;
}
l[poz]=v[i];
sol[i]=poz;
}
}
g<<t<<'\n';
recons(n,t,LONG_LONG_MAX);
return 0;
}