צבירת מי גשם

נתון כלי לצבירת מי גשם. חתך הכלי מתואר על ידי מערך הגבהים heights. למשל, עבור מערך הגבהים {2, 1, 1, 4, 1, 1, 2, 3}

צורת הכלי היא:

        
        
        
        

וכמות הגשם שניתן לצבור בכלי מיוצגת על ידי המשבצות הכחולות עם המספרים:

        
    321 
 76 54  
        

בהינתן מערך גבהים heights יש להחזיר את כמות הגשם שניתן לצבור בכלי עם מערך גבהים נתון.

למשל, עבור הכלי לעיל, ניתן לצבור 7 יחידות גשם (המשבצות המסומנות).

רמז: יש לחשב בכל מקום בכלי מה גובה העמודה המקסימלית / המינימלית מימינו ומשמאלו.

השיטה צריכה להיות יעילה ככל הניתן, גם מבחינת סיבוכיות הזמן וגם מבחינת סיבוכיות המקום.

אילוצים:

כל הערכים במערך (הגבהים) הם חיוביים ממש (גדולים מאפס).

דוגמה 1:
קלט:
heights = [2, 1, 1, 4, 1, 1, 2, 3]
פלט:
7

הסבר: בכלי זה ניתן לצבור 7 יחידות גשם, כפי שמודגם בתמונה

דוגמה 2:
קלט:
heights = [1, 2, 3, 4, 1]
פלט:
0

הסבר: בכלי זה לא ניתן לצבור גשם כלל כי אין שקעים שיכולים להכיל מים

דוגמה 3:
קלט:
heights = [3, 0, 2, 0, 4]
פלט:
7

הסבר: ניתן לצבור 3 יחידות מים בעמדה 1 ו-4 יחידות מים בעמדה 3

דוגמה 4:
קלט:
heights = [0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1]
פלט:
6

הסבר: בכלי המורכב יותר הזה, מצטברים 6 יחידות גשם במספר שקעים שונים

דוגמה 5:
קלט:
heights = [4, 2, 0, 3, 2, 5]
פלט:
9

הסבר: המים מצטברים בשקעים השונים בגבהים שונים, סה"כ 9 יחידות

דוגמה 6:
קלט:
heights = [5, 4, 1, 2]
פלט:
1

הסבר: ניתן לצבור יחידת מים אחת בלבד בעמדה 2

דוגמה 7:
קלט:
heights = [5, 2, 1, 2, 1, 5]
פלט:
14

הסבר: מבנה סימטרי עם דפנות גבוהות בקצוות מאפשר צבירת הרבה מים

דוגמה 8:
קלט:
heights = [1, 1, 1, 1]
פלט:
0

הסבר: כאשר כל העמודות באותו גובה, לא ניתן לצבור מים

Loading...
נשמרLn 1, Col 1

קלט:

heights = [2, 1, 1, 4, 1, 1, 2, 3]

הפלט המבוקש:

7