#include "stdio.h" #include <map> #include <vector> #include <algorithm> //#define DEBG #ifdef DEBG #define DB(fmt, ...) printf(fmt, ##__VA_ARGS__) #else #define DB(fmt, ...) #endif using namespace std; int main () { int a[1000100]; int n; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", &a[i]); DB("A: %d\n", a[i]); } int maxeval = -1; int maxevalcnt = 0; for (int l = 0; l < n; l++) { vector<int> v; for (int r = l; r < n; r++) { // [l, r] int cnt = r - l + 1; //vector<int> v(a + l, a + r + 1); v.push_back(a[r]); stable_sort(v.begin(), v.end()); int med2x; if (cnt % 2) { med2x = 2 * v[cnt / 2]; DB("MED: %d\n", v[cnt / 2]); } else { DB("MEDs: %d %d\n", v[cnt / 2 - 1], v[cnt / 2]); med2x = v[cnt / 2 - 1] + v[cnt / 2]; } int eval = cnt + med2x; DB("[l, r] = [%d, %d]: {v[l], v[r], cnt, med2x} = {%d, %d, %d, %d}\n", l, r, v[l], v[r], cnt, med2x); if (eval > maxeval) { DB("NEW max: %d, prev max %d\n", eval, maxeval); maxeval = eval; maxevalcnt = 1; } else if (eval == maxeval){ DB("Another max %d\n", eval); maxevalcnt++; } else { } } } printf("%d %d\n", maxeval, maxevalcnt); /* int maxeval = -1; // single for (int mid = 0; mid < n; mid++) { int count = min(mid, n - mid - 1) + 1; //DB("%d\n", num); int eval = count + 2 * a[mid]; maxeval = max(maxeval, eval); DB("EVAL single: %d\n", eval); } // double for (int mid0 = 0; mid0 < n - 1; mid0++) { int med2x = a[mid0] + a[mid0 + 1]; int count = min(mid0, n - (mid0 + 1) - 1) + 2; int eval = count + med2x; //DB("%d\n", num); maxeval = max(maxeval, eval); DB("EVAL double: %d\n", eval); } DB("Max eval: %d\n", maxeval); */ return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | #include "stdio.h" #include <map> #include <vector> #include <algorithm> //#define DEBG #ifdef DEBG #define DB(fmt, ...) printf(fmt, ##__VA_ARGS__) #else #define DB(fmt, ...) #endif using namespace std; int main () { int a[1000100]; int n; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", &a[i]); DB("A: %d\n", a[i]); } int maxeval = -1; int maxevalcnt = 0; for (int l = 0; l < n; l++) { vector<int> v; for (int r = l; r < n; r++) { // [l, r] int cnt = r - l + 1; //vector<int> v(a + l, a + r + 1); v.push_back(a[r]); stable_sort(v.begin(), v.end()); int med2x; if (cnt % 2) { med2x = 2 * v[cnt / 2]; DB("MED: %d\n", v[cnt / 2]); } else { DB("MEDs: %d %d\n", v[cnt / 2 - 1], v[cnt / 2]); med2x = v[cnt / 2 - 1] + v[cnt / 2]; } int eval = cnt + med2x; DB("[l, r] = [%d, %d]: {v[l], v[r], cnt, med2x} = {%d, %d, %d, %d}\n", l, r, v[l], v[r], cnt, med2x); if (eval > maxeval) { DB("NEW max: %d, prev max %d\n", eval, maxeval); maxeval = eval; maxevalcnt = 1; } else if (eval == maxeval){ DB("Another max %d\n", eval); maxevalcnt++; } else { } } } printf("%d %d\n", maxeval, maxevalcnt); /* int maxeval = -1; // single for (int mid = 0; mid < n; mid++) { int count = min(mid, n - mid - 1) + 1; //DB("%d\n", num); int eval = count + 2 * a[mid]; maxeval = max(maxeval, eval); DB("EVAL single: %d\n", eval); } // double for (int mid0 = 0; mid0 < n - 1; mid0++) { int med2x = a[mid0] + a[mid0 + 1]; int count = min(mid0, n - (mid0 + 1) - 1) + 2; int eval = count + med2x; //DB("%d\n", num); maxeval = max(maxeval, eval); DB("EVAL double: %d\n", eval); } DB("Max eval: %d\n", maxeval); */ return 0; } |