é”Œē›®ēš„é›£åŗ¦é”č‰²ä½æē”Ø Luogu äøŠēš„åˆ†ē“šļ¼Œē”±ē°”å–®åˆ°å›°é›£åˆ†åˆ„ē‚ŗ šŸ”“šŸŸ šŸŸ”šŸŸ¢šŸ”µšŸŸ£āš«ć€‚

šŸ”— P4552 [Poetize6] IncDec Sequence

Problem Statement

é”Œē›®ē°”čæ°

ēµ¦å®šäø€å€‹é•·åŗ¦ē‚ŗ nn ēš„ę•øåˆ— a1,a2,…,ana_1, a_2, \ldots, a_nļ¼ŒęÆę¬”åÆéøę“‡äø€å€‹å€é–“ [l,r][l, r] å°‡å€é–“å…§ę‰€ęœ‰ę•øåŠ  11 ęˆ–ęø› 11怂
ę±‚ęœ€å°‘éœ€č¦å¤šå°‘ę¬”ę“ä½œę‰čƒ½ä½æę•øåˆ—äø­ę‰€ęœ‰ę•øē›øē­‰ļ¼Œä»„åŠåœØęœ€å°‘ę“ä½œę¬”ę•øäø‹ļ¼Œęœ€ēµ‚åÆčƒ½å¾—åˆ°ēš„ę•øåˆ—ęœ‰å¹¾ēØ®ć€‚

Constraints

ē“„ęŸę¢ä»¶

  • 1≤n≤1000001 \le n \le 100000
  • 0≤ai≤2310 \le a_i \le 2^{31}

ę€č·Æļ¼šå·®åˆ†ę€ęƒ³

ę øåæƒę¦‚åæµļ¼šå€é–“ę“ä½œč½‰åŒ–ē‚ŗå–®é»žę“ä½œ

ē•¶é”Œē›®ę¶‰åŠć€Œå€é–“åŠ ęø›ć€äø”ęœ€ēµ‚ē›®ęØ™čˆ‡ć€Œē›øé„°å…ƒē“ ēš„ē›øå°å¤§å°ć€ęœ‰é—œę™‚ļ¼Œå·®åˆ†é™£åˆ—ę˜Æé¦–éøēš„ę€č€ƒę–¹å‘ć€‚

ēµ¦å®šåŽŸę•øåˆ—ļ¼Œęˆ‘å€‘å»ŗę§‹å…¶å·®åˆ†é™£åˆ—ļ¼Œå…¶äø­ęÆå€‹å…ƒē“ ē­‰ę–¼åŽŸę•øåˆ—ē•¶å‰å…ƒē“ čˆ‡å‰äø€å€‹å…ƒē“ ēš„å·®å€¼ć€‚
ē›®ęØ™ę˜Æć€Œä½æę•øåˆ—äø­ę‰€ęœ‰ę•øē›øē­‰ć€ļ¼Œé€™ē­‰åƒ¹ę–¼å·®åˆ†é™£åˆ—äø­é™¤äŗ†é¦–é …ä»„å¤–ēš„ę‰€ęœ‰å…ƒē“ éƒ½č®Šęˆ 00怂

å·®åˆ†é™£åˆ—ēš„ę€§č³Ŗ

å°åŽŸę•øåˆ—ēš„å€é–“ [l,r][l, r] é€²č”ŒåŠ  11 ęˆ–ęø› 11 ēš„ę“ä½œļ¼Œåę˜ åœØå·®åˆ†é™£åˆ—äøŠļ¼ŒåŖęœƒę”¹č®Šå…©å€‹å–®é»žēš„å€¼ļ¼š

  • å·¦é‚Šē•Œå°ę‡‰ēš„å·®åˆ†å€¼ęœƒå¢žåŠ ęˆ–ęø›å°‘ 11
  • å³é‚Šē•Œäø‹äø€å€‹ä½ē½®ēš„å·®åˆ†å€¼ęœƒęø›å°‘ęˆ–å¢žåŠ  11

ä¹Ÿå°±ę˜ÆčŖŖļ¼ŒęÆę¬”å€é–“ę“ä½œåÆä»„ēœ‹ä½œę˜Æéøę“‡å·®åˆ†é™£åˆ—äø­ēš„å…©å€‹ä½ē½®ļ¼Œäø€å€‹åŠ  11ļ¼Œå¦äø€å€‹ęø› 11怂

ę“ä½œåˆ†é”žčˆ‡č²Ŗåæƒē­–ē•„

ē‚ŗäŗ†ē”Øęœ€å°‘ēš„ę­„é©Ÿå°‡å·®åˆ†é™£åˆ—ļ¼ˆäøå«é¦–é …ļ¼‰å…ØéƒØę­øé›¶ļ¼Œęˆ‘å€‘åÆä»„å°‡ę“ä½œåˆ†ē‚ŗä»„äø‹å¹¾é”žļ¼š

  1. äæ®ę”¹å…©å€‹éƒ½åœØēÆ„åœå…§ēš„å·®åˆ†å€¼ļ¼š
    é€™ęœƒåŒę™‚ę”¹č®Šå·®åˆ†é™£åˆ—äø­å…©å€‹ęœ‰ę•ˆä½ē½®ēš„å€¼ć€‚å¦‚ęžœęˆ‘å€‘éøę“‡äø€å€‹ę­£ę•øå’Œäø€å€‹č² ę•øé€²č”Œé…å°ļ¼Œäø€ę¬”ę“ä½œå°±čƒ½č®“å…©å€‹ę•øéƒ½ę›“ęŽ„čæ‘ 00ć€‚é€™ę˜Æęœ€é«˜ę•ˆēš„ę“ä½œć€‚
  2. äæ®ę”¹é¦–é …čˆ‡äø€å€‹ēÆ„åœå…§ēš„å·®åˆ†å€¼ļ¼š
    é€™ęœƒę”¹č®ŠåŽŸę•øåˆ—ēš„é¦–é …ļ¼Œä»„åŠå·®åˆ†é™£åˆ—äø­ēš„äø€å€‹ä½ē½®ć€‚é€™ē›øē•¶ę–¼ę¶ˆč€—äø€ę¬”ę“ä½œä¾†ę¶ˆé™¤äø€å€‹å·®åˆ†å€¼ļ¼Œä½†ęœƒę”¹č®Šęœ€ēµ‚ę‰€ęœ‰å…ƒē“ ē›øē­‰ę™‚ēš„ē›®ęØ™å€¼ć€‚
  3. äæ®ę”¹äø€å€‹ēÆ„åœå…§ēš„å·®åˆ†å€¼čˆ‡äø€å€‹č¶…å‡ŗēÆ„åœēš„å€¼ļ¼š
    é€™ęœƒę”¹č®Šå·®åˆ†é™£åˆ—äø­ēš„äø€å€‹ä½ē½®ļ¼Œä»„åŠäø€å€‹č¶…å‡ŗēÆ„åœēš„ä½ē½®ć€‚é€™åŒęØ£ę˜Æę¶ˆč€—äø€ę¬”ę“ä½œä¾†ę¶ˆé™¤äø€å€‹å·®åˆ†å€¼ļ¼Œä½†äøęœƒę”¹č®Šé¦–é …ć€‚
å¦‚ä½•é”åˆ°ęœ€å°‘ę“ä½œę¬”ę•øļ¼Ÿ

ē‚ŗäŗ†č®“ę“ä½œę¬”ę•øęœ€å°‘ļ¼Œęˆ‘å€‘ę‡‰č©²ē›”åÆčƒ½å¤šåœ°ä½æē”Øē¬¬ 1 é”žę“ä½œć€‚

ęˆ‘å€‘åÆä»„åˆ†åˆ„ēµ±čØˆå·®åˆ†é™£åˆ—äø­ę‰€ęœ‰ę­£ę•øēš„ēø½å’Œčˆ‡ę‰€ęœ‰č² ę•øēµ•å°å€¼ēš„ēø½å’Œļ¼Œåˆ†åˆ„čØ˜åš pos\textit{pos} 和 neg\textit{neg}怂

  • é€éŽē¬¬ 1 é”žę“ä½œļ¼Œęˆ‘å€‘ęœ€å¤šåÆä»„é€²č”Œé€™å…©å€‹ēø½å’Œäø­č¼ƒå°å€¼ę¬”ę•øēš„é…å°ć€‚
  • é…å°å®Œå¾Œļ¼Œå·®åˆ†é™£åˆ—äø­åŖęœƒå‰©äø‹å…Øē‚ŗę­£ę•øęˆ–å…Øē‚ŗč² ę•øēš„éžé›¶å…ƒē“ ļ¼Œå…¶ēø½å’Œēš„ēµ•å°å€¼ē‚ŗę­£č² ēø½å’Œēš„å·®å€¼ć€‚
  • é€™äŗ›å‰©äø‹ēš„éžé›¶å…ƒē“ ļ¼ŒåŖčƒ½é€éŽē¬¬ 2 é”žęˆ–ē¬¬ 3 é”žę“ä½œä¾†é€äø€ę¶ˆé™¤ļ¼Œéœ€č¦ę¶ˆč€—čˆ‡å‰©é¤˜ēµ•å°å€¼ē›øē­‰ēš„ę¬”ę•øć€‚

å› ę­¤ļ¼Œęœ€å°‘ę“ä½œę¬”ę•øē‚ŗļ¼šmax⁔(pos,neg)\max(\textit{pos}, \textit{neg})怂

ęœ€ēµ‚ēµęžœēØ®é”žę•ø

ęœ€ēµ‚ę•øåˆ—ēš„ę‰€ęœ‰å…ƒē“ éƒ½ęœƒē­‰ę–¼é¦–é …ć€‚å› ę­¤ļ¼Œęœ€ēµ‚ēµęžœēš„ēØ®é”žę•øļ¼Œå–ę±ŗę–¼é¦–é …ęœ‰å¤šå°‘ēØ®åÆčƒ½ēš„å€¼ć€‚

åœØę¶ˆé™¤å‰©é¤˜ēš„ ∣posāˆ’neg∣|\textit{pos} - \textit{neg}| å€‹å·®åˆ†å€¼ę™‚ļ¼Œęˆ‘å€‘åÆä»„č‡Ŗē”±éøę“‡ä½æē”Øē¬¬ 2 é”žę“ä½œęˆ–ē¬¬ 3 é”žę“ä½œļ¼š

  • ęÆę¬”ä½æē”Øē¬¬ 2 é”žę“ä½œļ¼Œéƒ½ęœƒä½æé¦–é …åŠ  11 ęˆ–ęø› 11怂
  • ęÆę¬”ä½æē”Øē¬¬ 3 é”žę“ä½œļ¼Œé¦–é …äæęŒäøč®Šć€‚

å‡čØ­ęˆ‘å€‘åœØå‰©äø‹ēš„ę“ä½œäø­ļ¼Œéøę“‡äŗ† kk 欔第 2 é”žę“ä½œļ¼ˆkk ēš„ēÆ„åœå¾ž 00 åˆ°å‰©é¤˜ę“ä½œę¬”ę•øļ¼‰ļ¼Œé‚£éŗ¼é¦–é …å°±ęœƒęœ‰ ∣posāˆ’neg∣+1|\textit{pos} - \textit{neg}| + 1ć€ēØ®äøåŒēš„č®ŠåŒ–ēµęžœć€‚

č¤‡é›œåŗ¦åˆ†ęž

  • ę™‚é–“č¤‡é›œåŗ¦ļ¼šO(n)\mathcal{O}(n)ļ¼ŒåŖéœ€éę­·äø€ę¬”é™£åˆ—čØˆē®—å·®åˆ†åŠę­£č² ēø½å’Œć€‚
  • ē©ŗé–“č¤‡é›œåŗ¦ļ¼šO(n)\mathcal{O}(n)ļ¼Œē”Øę–¼å„²å­˜č¼øå…„ä»„åŠå·®åˆ†é™£åˆ—ć€‚

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def solve():
n = int(input())
A = [int(input()) for _ in range(n)]

# å»ŗē«‹å·®åˆ†é™£åˆ—
diff = [0] * n
for i in range(1, n):
diff[i] = A[i] - A[i - 1]

# ēµ±čØˆå·®åˆ†é™£åˆ—äø­ę­£ę•øčˆ‡č² ę•øēš„ēø½å’Œ
pos = sum(diff[i] for i in range(n) if diff[i] > 0)
neg = sum(-diff[i] for i in range(n) if diff[i] < 0)

print(max(pos, neg))
print(abs(pos - neg) + 1)


if __name__ == "__main__":
solve()