提交时间:2020-11-16 10:58:59

运行 ID: 1827

#include <bits/stdc++.h> using namespace std; #define int long long char buf[1 << 21], *p1 = buf, *p2 = buf; inline char getc(){ return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++; } inline void read(int &x){ x = 0; char s = getc(); while(s < '0' || s > '9') s = getc(); while('0' <= s && s <= '9'){ x = (x << 3) + (x << 1) + (s ^ 48); s = getc(); } } const int N = 1000010; int n, x, a[N], res; int l[N], r[N]; signed main() { read(n); read(x); for(int i = 1;i <= n;i++) read(a[i]); for(int i = 1;i <= n;i++){ // a[i]作为第一个max int Max = a[i], Min = x - a[i]; l[i] = r[i] = i; while(l[i] > 1 && a[l[i] - 1] < Max && a[l[i] - 1] >= Min) --l[i]; while(r[i] < n && a[r[i] + 1] <= Max && a[r[i] + 1] >= Min) ++r[i]; int ans = (i - l[i] + 1) * (r[i] - i + 1); if(a[i] != Min){ int L = i, R = i; while(L > l[i] && a[L - 1] != Min) --L; while(R < r[i] && a[R + 1] != Min) ++R; ans -= (i - L + 1) * (R - i + 1); } res += ans; } cout << res; return 0; }