Pagini recente » Cod sursa (job #1097516) | Cod sursa (job #942701) | Cod sursa (job #149776) | Cod sursa (job #775907) | Cod sursa (job #2573221)
#include <bits/stdc++.h>
#define NMAX 100009
#define INF 99999999
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int v[NMAX];
int best[NMAX];
int ar[NMAX];
vector<int>sol;
int cate;
int n;
void citire();
int main()
{citire();
return 0;
}
void citire()
{
int i;
fin>>n;
for(i=1;i<=n;i++)
fin>>v[i];
best[1]=1;
ar[1]=v[1];
cate=1;
for(i=2;i<=n;i++)
{
if(v[i]>ar[cate])
{
ar[++cate]=v[i];
best[i]=cate;
}
else
{
int pos=lower_bound(ar+1,ar+cate+1,v[i])-ar;
best[i]=pos;
ar[pos]=v[i];
}
}
fout<<cate<<'\n';
sol.push_back(INF);
for(i=n;i>=1 && cate;i--)
{
if(best[i]==cate && v[i]<sol[sol.size()-1])
{
sol.push_back(v[i]);cate--;
}
}
for(i=sol.size()-1;i>=1;i--)
fout<<sol[i]<<" ";
}