#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; } |
English