def vlookup(q, v, l, r): # 找到左界,若不存在返回应该插入的位置(即右边第一个元素的位置)
if l==r: return l
mid = (l + r) // 2
if q[mid][0] >= v: return vlookup(q,v,l,mid)
else: return vlookup(q,v,mid+1,r)
if __name__=='__main__':
n, m = map(int, raw_input().split())
q = []
for _ in range(n):
x, c = map(int, raw_input().split())
q.append((x, c))
q.sort() # python内置使用Timsort,复杂度nlogn
s = 0
k = q[0][0]
q_2 = [(k, s)]
for _ in q:
if k <> _[0]:
k = _[0]
q_2.append((k, s))
s += _[1]
q_2.append((10E10, s)) # 注意这里。前缀和是错位的。q_2[i]表示i位置前的加和
for _ in range(m):
l, r = map(int, raw_input().split())
l_idx = vlookup(q_2, l, 0, len(q_2))
r_idx = vlookup(q_2, r+1, 0, len(q_2))
s = q_2[r_idx][1] - q_2[l_idx][1]
print(s)
vlookup是excel那个Vlookup么!
啊!还真是受那个影响,你好机灵哦!