Pagini recente » Cod sursa (job #490628) | Cod sursa (job #608799) | Cod sursa (job #1133596) | Solutii preONI 2007, Runda 1 | Cod sursa (job #1828044)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream inf("scmax.in");
ofstream outf("scmax.out");
int n, v[100010], link[100010], L, j;
pair<int, int> p[100010];
void tipareste(int );
int main()
{
inf>>n;
for(int i=1; i<=n; i++)
inf>>v[i];
L=1;
p[1]=make_pair(v[1], 1);
for(int i=2; i<=n; i++)
{
j=(int)(upper_bound(p, p+L+1, make_pair(v[i], 0))-p);
link[i]=p[j-1].second;
if(v[i]<p[j].first)
p[j]=make_pair(v[i], i);
if(j==L+1)
L++,p[j]=make_pair(v[i], i);
}
outf<<L<<"\n";
tipareste(p[L].second);
return 0;
}
void tipareste(int k)
{
if(k==0)
return;
tipareste(link[k]);
outf<<v[k]<<" ";
}