Pagini recente » Cod sursa (job #2276921) | Cod sursa (job #2737848) | Cod sursa (job #151120) | Cod sursa (job #1265938) | Cod sursa (job #2267037)
#include <bits/stdc++.h>
#define DMAX 100100
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
void citire();
int cautbinar(int x);
void afisare();
int best[DMAX],poz[DMAX],a[DMAX];
int n,val;
int sol[DMAX];
int nr;
int cate;
int main()
{
citire();
afisare();
}
void afisare()
{int i;
fout<<cate<<'\n';
for(i=n;i>0;i--)
if(poz[i]==cate)
{
nr++;sol[nr]=a[i];cate--;
if(cate==0)
break;
}
for(i=nr;i>0;i--)
fout<<sol[i]<<' ';
}
void citire()
{int i;
fin>>n;
for(i=1;i<=n;i++)
{fin>>a[i];
if(a[i]>best[cate])
{cate++;best[cate]=a[i];poz[i]=cate;}
else
{
val=cautbinar(a[i]);poz[i]=val;
best[val]=a[i];
}
}
}
int cautbinar(int x)
{
int st=0,mij;int dr=cate+1;
while(dr-st>1)
{
mij=(st+dr)/2;
if(best[mij]<x)
st=mij;
else
dr=mij;
}
return dr;
}