Pagini recente » Cod sursa (job #2399319) | Cod sursa (job #725907) | Cod sursa (job #3135987) | Cod sursa (job #2804735) | Cod sursa (job #2448283)
#include <bits/stdc++.h>
using namespace std;
#define N 100010
int n,a[N],lis[N],pred[N], lmax;
void scrie(int x){
if(pred[x] == 0){
cout<<a[x]<<' ';
return;
}
scrie(pred[x]);
cout<<a[x]<<' ';
return;
}
int main()
{
ifstream cin("scmax.in");
ofstream cout("scmax.out");
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]>a[lis[lmax]])
{
lmax++;
lis[lmax] = i;
pred[i] =lis[lmax-1];
}
else if(a[i]<a[lis[1]]){
lis[1] = i;
pred[i] = 0;
}
else{
int st = 0, dr = lmax, mid;
while(dr - st > 1)
{
mid = (st + dr)/2;
if(a[i] <= a[lis[mid]])
dr = mid;
else st = mid;
}
lis[dr] = i;
pred[i] = lis[st];
}
}
cout<<lmax<<'\n';
scrie(lis[lmax]);
return 0;
}