Advertisement
Guest User

Untitled

a guest
Feb 1st, 2015
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.15 KB | None | 0 0
  1. def gen_lr(X):
  2.     S = []
  3.     res = []
  4.     index = 0
  5.     for i in X:
  6.         while len(S) != 0 and S[-1][0] >= i:
  7.             S.pop()
  8.         if len(S) == 0:
  9.             res.append(-1)
  10.         else:
  11.             res.append(S[-1][1])
  12.         S.append((i,index))
  13.         if index % 10**6 == 0:
  14.             print "b1",index
  15.         index += 1
  16.     return res
  17.  
  18. def gen_rl(X):
  19.     S = []
  20.     res = []
  21.     index = len(X)-1
  22.     for i in X:
  23.         while len(S) != 0 and S[-1][0] > i:
  24.             S.pop()
  25.         if len(S) == 0:
  26.             res.append((len(X)))
  27.         else:
  28.             res.append(S[-1][1])
  29.         S.append((i,index))
  30.         if index % 10**6 == 0:
  31.             print "b2",index
  32.         index -= 1
  33.     return res 
  34.    
  35. def bs(a,b):
  36.     h = min(a,b)
  37.     r1 = h*(h+1)/2
  38.     d = max(a,b)-min(a,b)
  39.     r2 = (d+1)*(h+1)
  40.     r3 = h*(h+1)/2
  41.     return r1+r2+r3
  42.    
  43. def actual(A):
  44.     total = 0  
  45.     B = gen_lr(A)
  46.     A.reverse()
  47.     C = gen_rl(A)
  48.     C.reverse()
  49.     A.reverse()
  50.     for i in xrange(len(B)):
  51.         b = B[i]
  52.         a = C[i]
  53.         db = abs(b-i+1)
  54.         da = a-i-1
  55.         total += bs(da,db)*A[i]
  56.         if i % 10**6 == 0:
  57.             print "b",i
  58.     print total,"asdf"     
  59.  
  60. def genA():
  61.     i = 290797
  62.     upto = 2*10**9
  63.     A = []
  64.     for x in xrange(upto):
  65.         i = i**2 % 50515093
  66.         A.append(i)
  67.         if x % 10**6 == 0:
  68.             print "a",x
  69.     print "a",x
  70.     return A
  71.  
  72. actual(genA())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement