Pagini recente » Cod sursa (job #950867) | Cod sursa (job #157590) | Cod sursa (job #1477075) | Cod sursa (job #443323) | Cod sursa (job #929639)
Cod sursa(job #929639)
#include <fstream>
#include <algorithm>
#define In "scmax.in"
#define Out "scmax.out"
#define N 100001
using namespace std;
int v[N],a[N],poz[N],na,n;
void Citire()
{
ifstream fin(In);
fin>>n;
for(int i=1;i<=n;i++)
fin>>v[i];
fin.close();
}
ofstream fout(Out);
void Afisare()
{
int lg=na,i;
for(i=n;i;i--)
{
if(poz[i]==lg)
{
a[lg] = v[i];
lg--;
}
}
fout<<na<<"\n";
for(i=1;i<=na;i++)
fout<<a[i]<<" ";
fout<<"\n";
}
void Rezolvare()
{
int i,*p,ind;
a[1] = v[1];
poz[1] = 1;
for(i=2;i<=n;i++)
{
p = upper_bound(a+1,a+na+1,v[i]);
ind = p-a;
if(v[i]==a[ind-1])
ind--;
if(ind>na)
na = ind;
poz[i] = ind;
a[ind] = v[i];
}
}
int main()
{
Citire();
Rezolvare();
Afisare();
return 0;
}