提交时间:2020-11-16 15:36:14
运行 ID: 1852
#include<bits/stdc++.h> using namespace std; const int maxn=1e6+5; inline int read(){ int x=0,f=1,ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-48;ch=getchar();} return x*f; } int n,x,a,stk_top; struct node{int val;bool col;int pos;}stk[maxn]; long long sum,ans; void add_sum(){ if(stk_top<=1)return ; if(stk[stk_top].val==stk[stk_top-1].val) sum+=stk[stk_top-1].pos-stk[stk_top-2].pos; } void del(){ if(stk_top==1){stk_top=0;return ;} if(stk[stk_top].val==stk[stk_top-1].val) sum-=stk[stk_top-1].pos-stk[stk_top-2].pos; stk_top--; } void print_stk(){ cout<<stk_top<<" "<<sum<<endl; for(int i=1;i<=stk_top;i++)cout<<stk[i].val<<" ";cout<<endl; } int main(){ n=read();x=read(); for(int i=1;i<=n;i++){ a=read(); while(stk[stk_top].val<a&&stk_top)del(); while(stk[stk_top].val==a&&!stk[stk_top].col&&stk_top)del(); stk[++stk_top]=(node){a,0,i}; add_sum(); a=x-a; while(stk[stk_top].val<a&&stk_top)del(); while(stk[stk_top].val==a&&stk[stk_top].col&&stk_top)del(); stk[++stk_top]=(node){a,1,i}; add_sum(); //print_stk(); ans+=sum; } cout<<ans<<endl; return 0; }