Pagini recente » Cod sursa (job #2356518) | Cod sursa (job #2366422) | Cod sursa (job #2759911) | Cod sursa (job #2244467) | Cod sursa (job #1156893)
#include<fstream>
#include<utility>
#include<set>
#define NMAX 100010
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int i, n, nr=0, a[NMAX], loc[NMAX], sol[NMAX];
set< pair<int, int> > S;
void Citeste()
{
int i;
f>>n;
for (i=1; i<=n; ++i) f>>a[i];
}
void Solve()
{
int i, o;
set<pair<int, int> > :: iterator it;
for (i=1; i<=n; ++i)
{
it=S.upper_bound(make_pair(a[i], 0));
if ( S.empty() || it==S.end() )
{
S.insert(make_pair(a[i], ++nr));
loc[i]=nr;
}
else
{
loc[i]=it->second;
S.erase(*it);
S.insert(make_pair(a[i], loc[i]));
}
}
}
void Scrie()
{
int x=S.size(), i;
g<<x<<"\n";
for (i=n; i>0; --i)
if (loc[i]==x)
{
--x;
sol[++sol[0]]=a[i];
}
for (i=sol[0]; i>0; --i) g<<sol[i]<<" ";
}
int main()
{
Citeste();
Solve();
Scrie();
f.close();
g.close();
return 0;
}