CSES - HIIT Open 2018 - Results
Submission details
Task:Buy Low, Sell High
Sender:El Numero Uno
Submission time:2018-05-26 15:28:15
Language:Python3
Status:READY
Result:
Test results
testverdicttime
#1--details
#2--details
#3--details
#4--details
#5--details
#6ACCEPTED0.03 sdetails
#7ACCEPTED0.05 sdetails
#8ACCEPTED0.06 sdetails
#9--details

Code

def parseM(m, v, reverse):
	n = []
	for pair in reversed(m):
		added = False
		if (v < pair[0] and not reverse) or (v > pair[0] and reverse):
			added = True
			n.append([v, v, 0])
			if pair[2] > 0:
				n.append(pair)
		if (v > pair[1] and not reverse) or (v < pair[1] and reverse):
			added = True
			n.append([pair[0], v, abs(v - pair[0])])
		if not added:
			n.append(pair)
		while len(n) > 1 and n[-1][2] <= n[0][2]:
			n.pop()
	return list(reversed(n))
	
 
def getAns(l, reverse=False):
	m = [[[l[0],l[0],0]]]
	for i in range(1, len(l)):
		v = l[i]
		m.append(parseM(m[-1], v, reverse))
	return m
			


input()
l = list(map(int, input().split()))
d1 = getAns(l)
d2 = list(reversed(getAns(list(reversed(l)), True)))
m = []
for i in range(len(l)):
	m.append(d1[i][0][2] + d2[i][0][2])
print(max(m))

Test details

Test 1

Verdict:

input
500000
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

correct output
0

user output
(empty)

Test 2

Verdict:

input
500000
1 2 3 4 5 6 7 8 9 10 11 12 13 ...

correct output
499999

user output
(empty)

Test 3

Verdict:

input
500000
500000 499999 499998 499997 49...

correct output
0

user output
(empty)

Test 4

Verdict:

input
500000
617752857 533265574 365848360 ...

correct output
1999980408

user output
(empty)

Test 5

Verdict:

input
500000
209620375 316066031 756114325 ...

correct output
1999992655

user output
(empty)

Test 6

Verdict: ACCEPTED

input
1
1

correct output
0

user output
0

Test 7

Verdict: ACCEPTED

input
2
1 1

correct output
0

user output
0

Test 8

Verdict: ACCEPTED

input
2
2 1

correct output
0

user output
0

Test 9

Verdict:

input
500000
1 1000000000 2 2 2 2 2 2 2 2 2...

correct output
1999999998

user output
(empty)