Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
1852 18级张钰晨 【S】T2 区间 C++ 通过 100 106 MS 4116 KB 1210 2020-11-16 15:36:14

Tests(10/10):


#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; }


测评信息: