您的位置:首页 > 编程语言 > Python开发

Codeforces Round #353 (Div. 2) ABCDE 题解 python

2016-05-18 00:07 525 查看
Problems

from collections import deque

def argmax(q,z):
l = 0
r = len(q) - 1
while(l<=r):
mid = (l+r)/2
x = q[mid]['i']
if(x<=z):
r = mid - 1
else:
l = mid + 1
return q[l]['i']

def gank(n,A):
a = [0]*(n+1)
a[1:] = A
b = [0]*(n+1)
b[n-1] = 1
q = deque()
q.append({'i':n-1, 'a':a[n-1]})
for i in range(n-2, 0, -1):
if(a[i]>=n):
b[i] = n-i
else:
x = argmax(q,a[i])
b[i] = x-i + b[x] + n - a[i]
while(len(q)>0 and q[-1]['a'] < a[i]):
q.pop()
q.append({'i':i, 'a':a[i]})
return sum(b)

n = int(raw_input())
a = map(int , raw_input().split(' '))
print gank(n,a)


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: