class Solution(object):
def swap(self, items, ind, i, j):
tmp=items[i]
items[i]=items[j]
items[j]=tmp
tmp=ind[i]
ind[i]=ind[j]
ind[j]=tmp
def quicksort(self, items, ind, start, end):
if start>=end: return
mid=start
midv=items[mid]
for i,item in enumerate(items[start+1:end]):
if item>midv:
self.swap(items, ind, mid+1, mid)
if start+1+i!=mid+1:
self.swap(items, ind, start+1+i, mid)
mid+=1
self.quicksort(items, ind, start, mid)
self.quicksort(items, ind, mid+1, end)
def trap(self, height):
"""
:type height: List[int]
:rtype: int
"""
ind = [ i for i in xrange(len(height)) ]
maxh=0
self.quicksort(height, ind, 0, len(height))
#print height, ind
watermap=[]
height0=0
wid=[]
s=0
for i in xrange(len(height)-1):
newpit=1
for pit in wid:
if ind[i+1]>pit[0] and ind[i+1]<pit[1]:
s-=height[i+1]
newpit=0
break
if newpit==1:
if len(wid)>0:
if ind[i+1]<wid[0][0]:
wid.insert(0, (ind[i+1],wid[0][0]))
s+=height[i+1]*(wid[0][1]-wid[0][0]-1)
else:
wid.append((wid[-1][1], ind[i+1]))
s+=height[i+1]*(wid[-1][1]-wid[-1][0]-1)
else:
if ind[i]<ind[i+1]:
wid.append((ind[i],ind[i+1]))
else:
wid.append((ind[i+1],ind[i]))
s+=height[i+1]*(wid[0][1]-wid[0][0]-1)
return s