Pagini recente » Cod sursa (job #365150) | Cod sursa (job #2258336) | Cod sursa (job #3213896) | Cod sursa (job #2060815) | Cod sursa (job #2499798)
#include <bits/stdc++.h>
#define NMAX 100001
using namespace std;
string file="scmax";
ifstream fin(file+".in");
ofstream fout(file+".out");
int n,maxi,cnt;
int a[NMAX],L[NMAX],check[NMAX];
int sol[NMAX];
int cb(int st,int dr,int i)
{
int m;
while(st<=dr){
m=(st+dr)>>1;
if(a[i]>check[m]) st=m+1;
else dr=m-1;
}
return st;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int i;
fin>>n;
for(i=1;i<=n;i++) fin>>a[i];
L[1]=1; check[1]=a[1]; maxi=1;
for(i=2;i<=n;i++){
int poz,dr;
dr=maxi;
poz=cb(1,dr,i);
if(poz==maxi+1) maxi++;
check[poz]=a[i];
L[i]=poz;
}
fout<<maxi<<"\n";
int curr=INT_MAX;
for(i=n;i>=1;i--){
if(L[i]==maxi&&a[i]<curr){
sol[++cnt]=a[i];
maxi--;
curr=a[i];
}
}
for(i=cnt;i>=1;i--) fout<<sol[i]<<" ";
return 0;
}