Pagini recente » Cod sursa (job #407812) | Monitorul de evaluare | Rating Florin Chiriac (FlorinCHI3) | Cod sursa (job #2461853) | Cod sursa (job #2844192)
#include<fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
#define ll long long
ll sol[100005],sol2[100005],n,prov[100005],v[100005];
ll cautare_binara(ll x,ll poz)
{
ll st,dr,mij;
st=0;
dr=poz-1;
while(st<=dr)
{
mij=(st+dr)/2;
if(sol[mij]<x && sol[mij+1]>=x)
{
return mij;
}
else if(sol[mij]<x)
st=mij+1;
else
dr=mij-1;
}
return -1;
}
void initializeaza()
{
for(int i=1;i<=n+1;i++)
{
sol2[i]=-1;
prov[i]=-1;
sol[i]=1e5+1;
}
prov[0]=-1;
sol2[0]=-1;
sol[0]=0;
}
void recurs_afis(ll x)
{
if(x==-1 || x==0)
return;
recurs_afis(prov[x]);
fout<<v[x]<<" ";
}
int main()
{
ll a,b;
fin>>n;
initializeaza();
for(int i=1;i<=n;i++)
{
fin>>a;
v[i]=a;
b=cautare_binara(a,i);
if(a<sol[b+1])
{
prov[i]=sol2[b];
sol[b+1]=a;
sol2[b+1]=i;
}
}
for(int i=n;i>0;i--)
{
if(sol[i]!=(1e5+1))
{
fout<<i<<"\n";
recurs_afis(sol2[i]);
return 0;
}
}
}
///sol[i]=elementul minim cu care se poate termina un subsir crescator de lungime i