המספר השלילי המקסימלי במערך טווחים

a הוא מערך המכיל מספרים שלמים ממוין בסדר עולה ממש (המספרים שונים זה מזה).

נגדיר מערך טווחים (range array) של a כמערך שנבנה באופן הבא: עבור כל רצף של מספרים עוקבים ב-a, יהיה במערך הטווחים אובייקט שמכיל שני שדות של מספרים שלמים. שדה אחד הוא המספר הקטן ביותר ברצף (small) והשני הוא המספר הגדול ביותר ברצף (big). רצף יכול להיות באורך 1 או יותר. אם הרצף באורך 1, הוא מיוצג במערך הטווחים על ידי אובייקט ששני השדות שלו שווים.

לדוגמה, עבור המערך a:

012345678910
345121920100101102103104

מערך הטווחים rangeA יהיה:

0123
<3, 5><12, 12><19, 20><100, 104>

(כל אובייקט מסומן כזוג סדור עם סוגריים משולשים).

לשם כך הוגדרה מחלקה בשם Range בה כל אובייקט מייצג טווח של מספרים לפי המתואר לעיל. להלן המחלקה Range:

java
Loading...

כתבו שיטה סטטית יעילה המקבלת כפרמטר מערך טווחים rangeA (המייצג מערך של מספרים שלמים a ממוינים בסדר עולה ממש). השיטה צריכה להחזיר את הערך של המספר השלילי הגדול ביותר במערך a (כלומר, המספר השלילי הקרוב ביותר ל-0). אם אין מספר שלילי ממש במערך a, השיטה תחזיר את הערך Integer.MIN_VALUE (המספר השלם הקטן ביותר האפשרי).

לדוגמה, עבור המערך rangeA הבא:

0123
<-17, -13><-2, -2><4, 6><20, 22>

שמייצג את המערך a:

01234567891011
-17-16-15-14-13-2456202122

השיטה תחזיר את הערך -2.

אם בתא באינדקס 1 של המערך rangeA יהיה הטווח <-2, 1>, השיטה תחזיר את הערך -1.

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

 
אילוצים:
  1. אפשר להניח שבכל אובייקט מהמחלקה Range, הערך _small תמיד קטן או שווה לערך _big.
  2. במערך הטווחים rangeA לא יכול להיות שיהיו שני תאים סמוכים שמייצגים טווח אחד רצוף. לדוגמה, לא ייתכן שיהיו הטווחים <2, 4> ו-<5, 7>. הטווח חייב להיות בתא אחד <2, 7>.
  3. אפשר להניח שבמערך המקורי a כל המספרים שונים זה מזה.
  4. אסור להמיר את מערך הטווחים rangeA למערך המספרים השלמים a ולעבוד על המערך a. השיטה אמורה לקבל את מערך הטווחים rangeA בלבד ולעבוד עליו.
  5. אורך הקלט n הוא גודל מערך הטווחים rangeA. כלומר, בדוגמה לעיל n = 4.
דוגמה 1:
קלט:
rangeA = [<-17, -13>, <-2, -2>, <4, 6>, <20, 22>]
פלט:
-2

הסבר: המערך a שמיוצג הוא [-17, -16, -15, -14, -13, -2, 4, 5, 6, 20, 21, 22]. המספר השלילי הגדול ביותר הוא -2.

דוגמה 2:
קלט:
rangeA = [<-5, -2>]
פלט:
-2

הסבר: המספר השלילי הגדול ביותר בטווחים הוא -2.

דוגמה 3:
קלט:
rangeA = [<1, 5>, <10, 20>]
פלט:
-2147483648

הסבר: אין מספרים שליליים בטווחים — מחזירים Integer.MIN_VALUE.

דוגמה 4:
קלט:
rangeA = [<-10, -5>, <-2, -2>, <0, 0>, <3, 7>]
פלט:
-2

הסבר: המספר השלילי הגדול ביותר בטווחים הוא -2.

דוגמה 5:
קלט:
rangeA = [<-3, -1>, <1, 1>, <3, 4>]
פלט:
-1

הסבר: המספר השלילי הגדול ביותר בטווחים הוא -1.

דוגמה 6:
קלט:
rangeA = [<-20, -10>, <-5, -5>, <0, 10>]
פלט:
-5

הסבר: המספר השלילי הגדול ביותר בטווחים הוא -5.

דוגמה 7:
קלט:
rangeA = [<0, 0>, <10, 50>, <100, 200>]
פלט:
-2147483648

הסבר: אין מספרים שליליים בטווחים — מחזירים Integer.MIN_VALUE.

דוגמה 8:
קלט:
rangeA = [<-100, -1>, <1, 1>]
פלט:
-1

הסבר: המספר השלילי הגדול ביותר בטווחים הוא -1.

דוגמה 9:
קלט:
rangeA = [<-3, 5>]
פלט:
-1

הסבר: הטווח חוצה את ה-0 (מתחיל בשלילי ונגמר בחיובי). המספר השלילי הגדול ביותר בטווח הוא -1.

דוגמה 10:
קלט:
rangeA = [<-50, -10>, <-5, 20>]
פלט:
-1

הסבר: הטווח האחרון חוצה את ה-0. גם בטווח הקודם יש שליליים (עד -5), אך השלילי הגדול ביותר הוא -1 שנמצא בטווח האחרון.

דוגמה 11:
קלט:
rangeA = [<-1, 10>]
פלט:
-1

הסבר: הטווח מתחיל ב--1 וחוצה את ה-0. המספר השלילי הגדול ביותר הוא -1.

דוגמה 12:
קלט:
rangeA = [<-1000000, 1000000>]
פלט:
-1

הסבר: טווח גדול מאוד שחוצה את ה-0. המספר השלילי הגדול ביותר הוא -1.

דוגמה 13:
קלט:
rangeA = [<-1, -1>]
פלט:
-1

הסבר: טווח של איבר בודד שלילי. המספר השלילי הגדול ביותר הוא -1.

דוגמה 14:
קלט:
rangeA = [<5, 5>]
פלט:
-2147483648

הסבר: טווח של איבר בודד חיובי, אין שליליים — מחזירים Integer.MIN_VALUE.

דוגמה 15:
קלט:
rangeA = [<0, 0>]
פלט:
-2147483648

הסבר: טווח של איבר בודד שהוא 0, אין שליליים — מחזירים Integer.MIN_VALUE.

דוגמה 16:
קלט:
rangeA = [<-100, -90>, <-50, -40>, <-10, 10>]
פלט:
-1

הסבר: מספר טווחים, האחרון חוצה את ה-0. המספר השלילי הגדול ביותר הוא -1 שנמצא בטווח האחרון.

בחר קובץ לעריכה מהתפריט בצד
Loading...
נשמרLn 1, Col 1

קלט:

rangeA = [<-17, -13>, <-2, -2>, <4, 6>, <20, 22>]

הפלט המבוקש:

-2