Pagini recente » Cod sursa (job #1919659) | Cod sursa (job #1612258) | Cod sursa (job #1665214) | Cod sursa (job #1124752) | Cod sursa (job #1071135)
#include <iostream>
#include <fstream>
#include <vector>
#include <deque>
using namespace std;
vector <int> v;
vector <int>::iterator p;
vector <int> r;
deque <pair <int,int> > emptydeck;
vector <deque <pair <int,int> > > deck;
int n,nr,i,pv,pd;
int main(void)
{
FILE * f;
f=fopen("scmax.in","r");
ofstream g("scmax.out");
fscanf(f,"%d",&n);
fscanf(f,"%d",&nr);
v.push_back(nr);
deck.push_back(emptydeck);
deck[0].push_back(make_pair(nr,-1));
for (i=2;i<=n;i++)
{
fscanf(f,"%d",&nr);
p=lower_bound(v.begin(),v.end(),nr);
if (p==v.end())
{
v.push_back(nr);
deck.push_back(emptydeck);
deck[v.size()-1].push_back(make_pair(nr,deck[v.size()-2].size()-1));
}
else
if (p==v.begin())
{
deck[0].push_back(make_pair(nr,-1));
v[0]=nr;
}
else
{
deck[p-v.begin()].push_back(make_pair(nr,deck[p-v.begin()-1].size()-1));
v[p-v.begin()]=nr;
}
}
pv=v.size()-1;
pd=deck[pv].size()-1;
while (pd!=-1)
{
r.push_back(deck[pv][pd].first);
pd=deck[pv][pd].second;
pv--;
}
g<<r.size()<<'\n';
for (i=r.size()-1;i>=0;i--)
g<<r[i]<<' ';
return 0;
}