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