#define make_pair mp #define emplace_back pb #include <bits/stdc++.h> using namespace std; mt19937 mt_rand(time(0)); const int N = 1e6 + 5; int where[N], n; int policz(int i, int mini, int maks) { if(i < maks - mini + 1) return 0; int pocz = max(1, maks - i + 1); int kon = min(n, mini + i - 1); return kon - (pocz + i - 1) + 1; } int main() { scanf("%d", &n); for(int i=1;i<=n;i++) { int a; scanf("%d", &a); where[a] = i; } long long res = 1; int maks = where[n]; int mini = where[n]; for(int i=2;i<=(n+2)/2;i++) { maks = max(maks, where[n-i+1]); mini = min(mini, where[n-i+1]); int dl = maks - mini + 1; int i1 = 2 * (i-1); res += policz(i1, mini, maks); i1++; if(i1 > n) continue; res += policz(i1, mini, maks); } printf("%d %lld\n", 2 * n + 1, res); 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 | #define make_pair mp #define emplace_back pb #include <bits/stdc++.h> using namespace std; mt19937 mt_rand(time(0)); const int N = 1e6 + 5; int where[N], n; int policz(int i, int mini, int maks) { if(i < maks - mini + 1) return 0; int pocz = max(1, maks - i + 1); int kon = min(n, mini + i - 1); return kon - (pocz + i - 1) + 1; } int main() { scanf("%d", &n); for(int i=1;i<=n;i++) { int a; scanf("%d", &a); where[a] = i; } long long res = 1; int maks = where[n]; int mini = where[n]; for(int i=2;i<=(n+2)/2;i++) { maks = max(maks, where[n-i+1]); mini = min(mini, where[n-i+1]); int dl = maks - mini + 1; int i1 = 2 * (i-1); res += policz(i1, mini, maks); i1++; if(i1 > n) continue; res += policz(i1, mini, maks); } printf("%d %lld\n", 2 * n + 1, res); return 0; } |