水题,怎么评到这个难度的?
#include <cstdio> #include <iostream> #define N 200001 int n, b, p, ans = 1; int c[N], d[N], a[N]; int *num1 = c + 100000, *num2 = d + 100000; inline int read() { int x = 0, f = 1; char ch = getchar(); for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1; for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0'; return x * f; } int main() { int i, x; n = read(); b = read(); for(i = 1; i <= n; i++) { a[i] = read(); if(a[i] == b) p = i; } x = 0; //x是比b大的数比比b小的数多多少个 for(i = p - 1; i >= 1; i--) { if(a[i] > b) x++; if(a[i] < b) x--; if(!((p - i) & 1) && !x) ans++; num1[x]++; } x = 0; //x是比b大的数比比b小的数少多少个 for(i = p + 1; i <= n; i++) { if(a[i] < b) x++; if(a[i] > b) x--; if(!((i - p) & 1) && !x) ans++; num2[x]++; } for(i = -n; i <= n; i++) ans += num1[i] * num2[i]; printf("%d ", ans); return 0; }