Pagini recente » Cod sursa (job #1342317) | Cod sursa (job #1349087) | Cod sursa (job #2147546) | Cod sursa (job #2787979) | Cod sursa (job #2533732)
#lugimea celui mai lung subsir crescator
f=open("scmax.in","r")
g=open("scmax.out","w")
n=int(f.readline())
sir=f.readline()
v=[ int(x) for x in sir.split()]
pred=[-1]*(n+1)
l=[0] # indicele celui mai mic nr care e ultim elem pt un sir de lungime i
l[0]=0
pred[0]=-1
for i in range(n):
a=v[i]
#cauatare binara in l pentru a l insera pe a
st=0
dr=len(l)-1
piv=(st+dr)//2
if a > v[l[len(l) - 1]]:
l.append(i)
pred[i]=l[len(l) - 2]
elif a < v[l[0]]:
l[0] = i
pred[i]=0
else:
while st<dr :
if v[l[piv]]<a<v[l[piv+1]]:
l[piv+1]=i
pred[i]=l[piv]
break
elif v[l[piv]]>a:
dr=piv
else:
st=piv+1
piv = (st + dr) // 2
g.write(str(len(l))+"\n")
ind=l[-1]
final=[]
while pred[ind] !=-1:
final.append(v[ind])
ind=pred[ind]
k=len(final)-1
while k>=0:
g.write(str(final[k])+" ")
k-=1