#include <cstdio>
#include <vector>
using namespace std;
int N;
vector<int> A;
int ai, b, e;
long long c;
int main() {
scanf("%d", &N);
A.resize(N + 1);
for (int i = 1; i <= N; i++) {
scanf("%d", &ai);
A[ai] = i;
}
b = e = A[N];
c = 1LL * (2 - N % 2);
for (int i = 1; 2 * i < N; ++i) {
if (A[N - i] < b) {
b = A[N - i];
} else if (A[N - i] > e) {
e = A[N - i];
}
if (e - b < 2 * i) {
ai = 2 * i - e + b - 1;
c += 1LL * (1 + min(b - 1, ai) + min(N - e, ai) - ai);
}
if (e - b < 2 * i + 1) {
ai = 2 * i - e + b;
c += 1LL * (1 + min(b - 1, ai) + min(N - e, ai) - ai);
}
}
printf("%d %lld\n", 2 * N + 1, c);
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 <cstdio> #include <vector> using namespace std; int N; vector<int> A; int ai, b, e; long long c; int main() { scanf("%d", &N); A.resize(N + 1); for (int i = 1; i <= N; i++) { scanf("%d", &ai); A[ai] = i; } b = e = A[N]; c = 1LL * (2 - N % 2); for (int i = 1; 2 * i < N; ++i) { if (A[N - i] < b) { b = A[N - i]; } else if (A[N - i] > e) { e = A[N - i]; } if (e - b < 2 * i) { ai = 2 * i - e + b - 1; c += 1LL * (1 + min(b - 1, ai) + min(N - e, ai) - ai); } if (e - b < 2 * i + 1) { ai = 2 * i - e + b; c += 1LL * (1 + min(b - 1, ai) + min(N - e, ai) - ai); } } printf("%d %lld\n", 2 * N + 1, c); return 0; } |
English