Pagini recente » Cod sursa (job #2257080) | Cod sursa (job #2791103) | Cod sursa (job #576653) | Cod sursa (job #3004612) | Cod sursa (job #2704143)
#include <fstream>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
const int NMAX=100005;
int lung[NMAX],k,best[NMAX];
int v[NMAX],last[NMAX],sol[NMAX];
int cautarebin(int val,int n)
{
int st=0,dr=n,rasp;
while(st<=dr)
{
int mij=(st+dr)/2;
if(v[best[mij]]<v[val])
{
rasp=mij;
st=mij+1;
}
else
dr=mij-1;
}
return rasp;
}
int main()
{
int n,i,kon=0,maxi=0,j,copie,m,t=0,poz;
fin>>n;
for(i=1; i<=n; i++)
fin>>v[i];
for(i=1; i<=n; i++)
{
poz=cautarebin(i,maxi);
lung[i]=poz+1;
best[poz+1]=i;
if(lung[i]>maxi)
maxi=lung[i];
}
fout<<maxi<<"\n";
for(i=n; i>=1; i--)
if(lung[i]==maxi)
{
sol[++k]=i;
maxi--;
}
for(i=k; i>=1; i--)
fout<<v[sol[i]]<<" ";
}