Pagini recente » Cod sursa (job #1301698) | Cod sursa (job #1158841) | Cod sursa (job #1446176) | Cod sursa (job #2858159) | Cod sursa (job #2928743)
#include <bits/stdc++.h>
using namespace std;
#define nmax 100000
ifstream f("scmax.in");
ofstream g("scmax.out");
int v[nmax+5],p[nmax+5],sir[nmax+5],d[nmax+5];
int main()
{
int n,k=1;
f>>n;
for(int i=1;i<=n;++i)
f>>v[i];
d[k]=v[1];
p[1]=1;
for(int i=2;i<=n;++i)
if(v[i]>d[k])d[++k]=v[i],p[i]=k;
else {
int st=1,dr=k,poz=k+1;
while(st<=dr){
int mid=(st+dr)/2;
if(d[mid]>v[i])poz=mid,dr=mid-1;
else st=mid+1;
}
d[poz]=v[i];
p[i]=poz;
}
int n1=n;
for(int i=k;i>=1;--i){
while(p[n1]!=i)n1--;
sir[i]=n1;
}
g<<k-1<<"\n";
for(int i=1;i<=k;++i)
g<<v[sir[i]]<<" ";
}