Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
27837 | 22级廖思学 | 【S】T2 区间 | C++ | 运行超时 | 0 | 1000 MS | 89944 KB | 1215 | 2024-03-31 10:14:13 |
#include<bits/stdc++.h> using namespace std; #define int long long #define ls pos<<1 #define rs pos<<1|1 int a[1000010]; int t[4000010][5]; void Pushup(int pos){ t[pos][1]=max(t[ls][1],t[rs][1]); t[pos][2]=min(t[ls][2],t[rs][2]); } void build(int pos,int l,int r){ if(l==r){ t[pos][1]=t[pos][2]=a[l]; return; } int mid=(l+r)>>1; build(ls,l,mid); build(rs,mid+1,r); Pushup(pos); } int querymax(int pos,int l,int r,int ql,int qr){ if(l>=ql&&r<=qr){ return t[pos][1]; } int mid=(l+r)>>1,mmax=0; if(ql<=mid)mmax=max(mmax,querymax(ls,l,mid,ql,qr)); if(qr>mid)mmax=max(mmax,querymax(rs,mid+1,r,ql,qr)); return mmax; } int querymin(int pos,int l,int r,int ql,int qr){ if(l>=ql&&r<=qr){ return t[pos][2]; } int mid=(l+r)>>1,mmin=1e9; if(ql<=mid)mmin=min(mmin,querymin(ls,l,mid,ql,qr)); if(qr>mid)mmin=min(mmin,querymin(rs,mid+1,r,ql,qr)); return mmin; } signed main(){ int n,x;cin>>n>>x; for(int i=1;i<=n;i++){ cin>>a[i]; } build(1,1,n); int cnt=0; for(int i=1;i<=n;i++){ for(int j=i;j<=n;j++){ int mmax=querymax(1,1,n,i,j); int mmin=querymin(1,1,n,i,j); if(mmax+mmin==x)cnt++; } } cout<<cnt<<endl; return 0; }