Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
1830 | 18级王浩宇 | 【S】T2 区间 | C++ | 运行超时 | 0 | 1000 MS | 20544 KB | 1439 | 2020-11-16 11:14:58 |
#include<bits/stdc++.h> #define ls (now<<1) #define rs (now<<1|1) #define mid ((l+r)>>1) using namespace std; const int N=1e6+10; const int inf=0x3f3f3f3f; int n,k,ans; int a[N],tmin[N<<2],tmax[N<<2]; int build_min(int now,int l,int r) { if(l==r) { tmin[now]=a[l]; return a[l]; } tmin[now]=min(build_min(ls,l,mid),build_min(rs,mid+1,r)); return tmin[now]; } int query_min(int now,int l,int r,int x,int y) { if (y < l || r < x) { return inf; } if(x<=l && r<=y) return tmin[now]; return min(query_min(ls,l,mid,x,y),query_min(rs,mid+1,r,x,y)); } int build_max(int now,int l,int r) { if(l==r) { tmax[now]=a[l]; return a[l]; } tmax[now]=max(build_max(ls,l,mid),build_max(rs,mid+1,r)); return tmax[now]; } int query_max(int now,int l,int r,int x,int y) { if (y < l || r < x) { return 0; } if(x<=l && r<=y) return tmax[now]; return max(query_max(ls,l,mid,x,y),query_max(rs,mid+1,r,x,y)); } int main() { scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%d",&a[i]); build_min(1,1,n); build_max(1,1,n); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(query_max(1,1,n,i,j)+query_min(1,1,n,i,j)==k) ans++; } } printf("%d",ans); return 0; }