/* Implementace ukolu 2 */ #include #include #define MAXN 100000 using namespace std; enum KONEC {LEVY, PRAVY}; struct endpoint { int h; //vyska int t; //typ - LEVY nebo PRAVY }E[MAXN]; //pole vsech koncovych bodu int El; // pocet prvku v E bool compare(endpoint A, endpoint B) { if (A.h < B.h) return true; if (A.h == B.h && A.t > B.t) //Dulezite! Pokud ma vic intervalu stejny koncovy bod, napred se zbavime pravych - tak se vyhneme prazdnym intervalum return true; return false; } int N; int list[MAXN]; int main() { scanf("%d", &N); for (int i = 0; i < N; i++) scanf("%d", &list[i]); if (N == 1) { printf("%d\n", list[0]); return 0; } int a, b; for (int i = 1; i < N; i++) { a = list[i-1], b = list[i]; if (a > b) swap(a, b); E[El++] = (endpoint) {a, LEVY}; E[El++] = (endpoint) {b, PRAVY}; } sort(E, E+El, compare); int bestnum = 0, bestl = -1, bestr = -1, num = 0, l; for (int i = 0; i < N; i++) { if (E[i].t == LEVY) { l = E[i].h; num++; } if (E[i].t == PRAVY) { if (num > bestnum) { bestnum = num; bestl = l; bestr = E[i].h; } num--; } } printf("%.1f\n", ((double) bestl + (double) bestr)/2.0); return 0; }