class segtreemin: def __init__(self,n): self.size=1 while self.size1: x//=2 self.dat[x]=min(self.dat[2*x],self.dat[2*x+1]) def querry(self,u,v): u+=self.size v+=self.size score=10**10 while u1: x//=2 self.dat[x]=max(self.dat[2*x],self.dat[2*x+1]) def querry(self,u,v): u+=self.size v+=self.size score=0 while u=b: y=b-1 score=Z.querry(j,y+1) if score<=m: r=m else: l=m+1 ans=min(ans,l) l=0 r=W-1 while True: if l==r: break m=(l+r)//2 y=j-m if y<=a: y=a+1 score=Z.querry(y,j+1) if score<=m: r=m else: l=m+1 ans=min(ans,l) dp2[j]=ans dp=dp2[:] for j in range(W): Z.update(j,dp[j]) for i in range(W): print(dp[i])