Pagini recente » Cod sursa (job #1655214) | Cod sursa (job #2206441) | Cod sursa (job #2902611) | Cod sursa (job #1358665) | Cod sursa (job #2244634)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f ("scmax.in");
ofstream g ("scmax.out");
int i,j,n,k,sol[100001],a[100001],v[100001],st,dr,mid,poz,l[100001],tata[100001],maxi,p;
int main()
{ f>>n;k=0;
for(i=1;i<=n;i++){
f>>v[i];
st=1;dr=k+1;poz=k+1;
while(st<=dr){
mid=(st+dr)/2;
if(v[a[mid]]>=v[i]){
dr=mid-1;
poz=mid;
}
else{
st=mid+1;
}
}
a[poz]=i;
tata[i]=a[poz-1];
l[i]=poz;
k=max(poz,k);
if(maxi<l[i]){
maxi=l[i];
p=i;
}
}
k=0;
for(i=1;i<=maxi;i++){
sol[++k]=v[p];
p=tata[p];
}
g<<maxi<<'\n';
for(i=k;i>=1;i--)
g<<sol[i]<<' ';
return 0;
}