#include <cstdio> #include <algorithm> #include <vector> #include <time.h> #define MAX_N 1000010 using namespace std; int n; int p[MAX_N], pos[MAX_N]; long long ile(int wyb, int lp, int rp) { //printf("- %d %d %d\n", wyb, lp, rp); if (wyb < 0) { return 0; } if (wyb == 0) { return 1; } return max(0, min(min(lp + 1, rp + 1), min(lp + rp - wyb + 1, wyb + 1))); } int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", &p[i]); pos[p[i]] = i; } int wyn = n * 2 + 1; long long sp = 1; int l = pos[n], r = pos[n]; for (int i = 2; i <= n / 2 + 1; i++) { //printf("\n\n%d:\n", i); int a = n - i + 1; //printf("A = %d\n", a); l = min(l, pos[a]); r = max(r, pos[a]); //printf("(%d-%d)\n", l, r); int inside = (r - l + 1) - i; // pomiedzy n-i+2 a n-i+1 sp += ile(i - 2 - inside, l - 1, n - r); //printf("Pom: %lld\n", ile(i - 2 - inside, l - 1, n - r)); // na n-i+1 sp += ile(i - 1 - inside, l - 1, n - r); //printf("Na: %lld\n", ile(i - 1 - inside, l - 1, n - r)); } printf("%d %lld\n", wyn, sp); }
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 54 55 56 57 58 | #include <cstdio> #include <algorithm> #include <vector> #include <time.h> #define MAX_N 1000010 using namespace std; int n; int p[MAX_N], pos[MAX_N]; long long ile(int wyb, int lp, int rp) { //printf("- %d %d %d\n", wyb, lp, rp); if (wyb < 0) { return 0; } if (wyb == 0) { return 1; } return max(0, min(min(lp + 1, rp + 1), min(lp + rp - wyb + 1, wyb + 1))); } int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", &p[i]); pos[p[i]] = i; } int wyn = n * 2 + 1; long long sp = 1; int l = pos[n], r = pos[n]; for (int i = 2; i <= n / 2 + 1; i++) { //printf("\n\n%d:\n", i); int a = n - i + 1; //printf("A = %d\n", a); l = min(l, pos[a]); r = max(r, pos[a]); //printf("(%d-%d)\n", l, r); int inside = (r - l + 1) - i; // pomiedzy n-i+2 a n-i+1 sp += ile(i - 2 - inside, l - 1, n - r); //printf("Pom: %lld\n", ile(i - 2 - inside, l - 1, n - r)); // na n-i+1 sp += ile(i - 1 - inside, l - 1, n - r); //printf("Na: %lld\n", ile(i - 1 - inside, l - 1, n - r)); } printf("%d %lld\n", wyn, sp); } |