Pagini recente » Cod sursa (job #152562) | Cod sursa (job #1633573) | Cod sursa (job #852400) | Cod sursa (job #2568508) | Cod sursa (job #886676)
Cod sursa(job #886676)
#include <fstream>
#define NMAX 100001
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
void cauta(int prim,int ultim);
int n,i,mijl,bst[NMAX],a[NMAX],poz[NMAX],p,u,v[NMAX];
int main()
{
int lg=1;
fin>>n;
for(i=1;i<=n;i++) fin>>a[i];
bst[1]=a[1];poz[1]=lg;
for(i=2;i<=n;i++)
{
cauta(1,lg);
if(p>lg)
{
bst[++lg]=a[i];
poz[i]=lg;
}
else
{
bst[mijl]=a[i];
poz[i]=mijl;
}
}
fout<<lg<<"\n";
int k=0;
for(i=n;i>0 && lg!=0;)
{
while(poz[i]!=lg) i--;
v[++k]=a[i];
lg--;
}
for(i=k;i>=1;i--)
fout<<v[i]<<" ";
}
void cauta(int prim,int ultim)
{
p=prim;u=ultim;
while(p<=u)
{
mijl=(p+u)/2;
if(bst[mijl]<a[i]) p=mijl+1;
if(bst[mijl]>a[i]) u=mijl-1;
if(bst[mijl]==a[i]) break;
}
}