Pagini recente » Cod sursa (job #1244885) | Cod sursa (job #1994208) | Cod sursa (job #1742036) | Cod sursa (job #2782687) | Cod sursa (job #2391518)
#include <bits/stdc++.h>
#define NM 100005
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
void read();
int n, a[NM], pr[NM];
vector<int> v;
void afisare(int x)
{
for(int i=x-1; i>=1; i--)
if(pr[i] == pr[x]-1)
{
afisare(i);
break;
}
fout << a[x] << ' ';
}
int main()
{
read();
v.push_back(a[1]);
for(int i=2; i<=n; i++)
{
if(a[i] > v[v.size()-1])
{
v.push_back(a[i]);
pr[i] = v.size()-1;
}
else
{
vector<int>::iterator it;
it = lower_bound(v.begin(), v.end(), a[i]);
*it = a[i];
pr[i] = distance(v.begin(), it);
}
}
fout << v.size() << '\n';
int maxx = 0, ind;
for(int i=1; i<=n; i++)
if(pr[i] > maxx)
{
maxx = pr[i];
ind = i;
}
afisare(ind);
return 0;
}
void read()
{
fin >> n;
for(int i=1; i<=n; i++)
fin >> a[i];
}