Pagini recente » Cod sursa (job #16575) | Cod sursa (job #659359) | Cod sursa (job #2659359) | Cod sursa (job #2719593) | Cod sursa (job #2300641)
#include <iostream>
#include <fstream>
#include <set>
#define INT_MAX 2000000001
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n;
struct Best
{
int val,urm,best,poz;
};
struct comp
{
bool operator()(Best a,Best b)
{
return a.best>b.best;
}
};
multiset<Best,comp> s;
Best x[100001];
int main()
{
f>>n;
for(int i=1;i<=n;i++)
{
f>>x[i].val;
x[i].best=1;
x[i].urm=0;
x[i].poz=i;
}
x[0].best=x[0].urm=0;
x[0].poz=0;
x[0].val=INT_MAX;
s.insert(x[n]);
s.insert(x[0]);
int best=0;
for(int i=n-1;i>=1;i--)
{
multiset<Best,comp>::iterator j;
for(j=s.begin();j->val<=x[i].val;j++);
x[i].urm=j->poz;
x[i].best=1+j->best;
s.insert(x[i]);
}
int p=s.begin()->poz;
g<<x[p].best<<'\n';
while(x[p].best)
{
g<<x[p].val<<' ';
p=x[p].urm;
}
return 0;
}