提交时间:2020-11-16 16:28:34

运行 ID: 1866

#include <bits/stdc++.h> #define MAXN 1000008 using namespace std; int n, x; int a[MAXN]; struct Stack{int val, k, pos;} st[MAXN]; int top = 0; int sum, ans; void del() { if(top > 1) { if(st[top].val == st[top - 1].val) { sum -= st[top - 1].pos - st[top - 2].pos; } } top--; } void pus(int val, int k, int pos) { st[++top] = Stack{val, k, pos}; } void upd() { if(top > 1) { if(st[top].val == st[top - 1].val) { sum += st[top - 1].pos - st[top - 2].pos; } } } int main() { scanf("%d%d", &n, &x); for(int i = 1; i <= n; i++) { scanf("%d", &a[i]); } for(int i = 1; i <= n; i++) { int val = a[i], k = 1, pos = i; while(st[top].val < val && top > 0) del(); while(st[top].val == val && st[top].k == k && top > 0) del(); pus(val, k, pos); upd(); val = x - a[i]; k = 2; pos = i; while(st[top].val < val && top > 0) del(); while(st[top].val == val && st[top].k == k && top > 0) del(); pus(val, k, pos); upd(); ans += sum; } cout << ans << endl; return 0; }