// Created by Michal Kowalski on 09/12/2021. // #include <iostream> #include <queue> #include <vector> #include <algorithm> int N; int T[1000001]; long long countF = 0; int maxF = 0; void check(std::vector<int> & v) { int vsize = v.size(); double median = 0.0; if (vsize % 2 == 0) { int i = vsize/2; median = (v[i-1] + v[i])/2.0; } else { int i = vsize/2; median = v[i]; } int f = vsize + (int)(2.0*median); if (maxF == f) { ++countF; } } int main() { scanf("%d",&N); int maxPos = -1; for (int i=0;i<N;++i) { scanf("%d",&T[i]); if (T[i] == N) maxPos = i; } maxF = 1+2*N; for (int l=0;l<=maxPos;++l) { std::vector<int> v; v.insert(v.end(), &T[l], &T[maxPos+1]); std::sort(v.begin(), v.end()); check(v); for (int i=1;maxPos+i<N;++i) { int val = T[maxPos+i]; std::vector<int>::iterator it = std::lower_bound(v.begin(), v.end(), val); v.insert(it, val); check(v); } } printf("%d %lld\n",maxF, countF); 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 | // Created by Michal Kowalski on 09/12/2021. // #include <iostream> #include <queue> #include <vector> #include <algorithm> int N; int T[1000001]; long long countF = 0; int maxF = 0; void check(std::vector<int> & v) { int vsize = v.size(); double median = 0.0; if (vsize % 2 == 0) { int i = vsize/2; median = (v[i-1] + v[i])/2.0; } else { int i = vsize/2; median = v[i]; } int f = vsize + (int)(2.0*median); if (maxF == f) { ++countF; } } int main() { scanf("%d",&N); int maxPos = -1; for (int i=0;i<N;++i) { scanf("%d",&T[i]); if (T[i] == N) maxPos = i; } maxF = 1+2*N; for (int l=0;l<=maxPos;++l) { std::vector<int> v; v.insert(v.end(), &T[l], &T[maxPos+1]); std::sort(v.begin(), v.end()); check(v); for (int i=1;maxPos+i<N;++i) { int val = T[maxPos+i]; std::vector<int>::iterator it = std::lower_bound(v.begin(), v.end(), val); v.insert(it, val); check(v); } } printf("%d %lld\n",maxF, countF); return 0; } |