N=int(input()) A=list(map(int,input().split())) mod=10**9+7 compression_dict={a: ind+1 for ind, a in enumerate(sorted(set(A)))} A=[compression_dict[a] for a in A] def seg_function(x,y): # Segment treeで扱うfunction if x[0]==y[0]: return (x[0],x[1]+y[1]) elif x[0]>y[0]: return x else: return y seg_el=1<<(N.bit_length()) # Segment treeの台の要素数 SEG=[(-1,0)]*(2*seg_el) # 1-indexedなので、要素数2*seg_el.Segment treeの初期値で初期化 def update(n,x,seg_el): # A[n]をxへ更新(反映) i=n+seg_el SEG[i]=x i>>=1# 子ノードへ while i!=0: SEG[i]=seg_function(SEG[i*2],SEG[i*2+1]) i>>=1 def getvalues(l,r):# 区間[l,r)に関するseg_functionを調べる L=l+seg_el R=r+seg_el ANS=(-1,0) while L>=1 R>>=1 return ANS update(0,(0,1),seg_el) for a in A: y=getvalues(a,a+1) z=getvalues(0,a) #print(a,x,y) if z[0]