#include <iostream>
#include <vector>
#include <algorithm>
#include <iomanip>
using namespace std;
int calculate(const vector<int> &A, int l, int r) {
vector<int> B;
copy(A.begin()+l, A.begin()+r, back_inserter(B));
int N = r-l;
sort(B.begin(), B.end());
return B[(N-1)/2] + B[N/2];
}
int main() {
int n;
cin >> n;
vector<int> A(n);
for (auto &a: A) cin >> a;
int M2 = n+1;
long long cnt = 0;
for (int N=n; N>0; N--) {
int l=0;
int lt = 0;
int eq = 0;
for (int r=0; r<n; r++) {
if (2*A[r]<M2) lt++;
if (2*A[r]==M2) eq++;
while (r-l+1 > N) {
if (2*A[l]<M2) lt--;
if (2*A[l]==M2) eq--;
l++;
}
if (r-l+1 == N) {
if ((lt == N/2 && eq == N%2) && (N%2 == 1 || (calculate(A, l, r+1) == M2))) cnt++;
}
}
M2++;
}
cout << 2*n+1 << " " << cnt << "\n";
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 | #include <iostream> #include <vector> #include <algorithm> #include <iomanip> using namespace std; int calculate(const vector<int> &A, int l, int r) { vector<int> B; copy(A.begin()+l, A.begin()+r, back_inserter(B)); int N = r-l; sort(B.begin(), B.end()); return B[(N-1)/2] + B[N/2]; } int main() { int n; cin >> n; vector<int> A(n); for (auto &a: A) cin >> a; int M2 = n+1; long long cnt = 0; for (int N=n; N>0; N--) { int l=0; int lt = 0; int eq = 0; for (int r=0; r<n; r++) { if (2*A[r]<M2) lt++; if (2*A[r]==M2) eq++; while (r-l+1 > N) { if (2*A[l]<M2) lt--; if (2*A[l]==M2) eq--; l++; } if (r-l+1 == N) { if ((lt == N/2 && eq == N%2) && (N%2 == 1 || (calculate(A, l, r+1) == M2))) cnt++; } } M2++; } cout << 2*n+1 << " " << cnt << "\n"; return 0; } |
English