Pagini recente » Cod sursa (job #2907321) | Cod sursa (job #2813861) | Cod sursa (job #3149307) | Cod sursa (job #1897037) | Cod sursa (job #2938931)
#include <bits/stdc++.h>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
struct ura{
int nr,poz;
}v[100005];
bool ord(ura a, ura b){
return a.nr<b.nr;
}
int sir[100005],dp[100001];
int main()
{
int n,i,j=0;
in>>n;
for(i=1;i<=n;++i)
{
in>>v[i].nr;
v[i].poz=i;
}
sir[++j]=v[1].nr;
dp[1]=1;
for(i=2;i<=n;++i)
{
if(v[i].nr>sir[j]){
sir[++j]=v[i].nr;
dp[i]=j;
}
else{
int st=1;
int dr=j;
int ans=1;
while(st<=dr){
int mid=(st+dr)/2;
if(v[i].nr>sir[mid])
st=mid+1;
else{
ans=mid;
dr=mid-1;
}
}
sir[ans]=v[i].nr;
dp[i]=ans;
}
}
out<<j<<'\n';
j=1;
sort(v+1,v+n+1,ord);
for(i=1;i<=n;++i)
if(dp[v[i].poz]==j){
out<<v[i].nr<<" ";
++j;
}
return 0;
}