Cod sursa(job #2533732)

Utilizator vvrr24vvrr24 vvrr24 Data 29 ianuarie 2020 17:20:58
Problema Subsir crescator maximal Scor 65
Compilator py Status done
Runda Arhiva educationala Marime 0.96 kb
#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