[CQOI2009] 中位数 - 桶

给出 \(1~n\) 的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是 \(b\)。中位数是指把所有元素从小到大排列后,位于中间的数。

Solution

(这个题为什么会被打上数学标签?)

由于给出的是排列,我们找到这个数在哪,然后考虑它左边和右边的数

我们把比它大的数都变成 \(1\) ,小的都变成 \(-1\)

向左的后缀和值构成的多重集 \(A\),向右的 \(B\)

现在就是要在向左和向右里面各找出一个数相加和为 \(0\),求方案数

拿桶搞搞就可以了

#include 
using namespace std;

#define int long long
int n,k,x[100005],s[200005],a[200005],b[200005];

signed main() {
    ios::sync_with_stdio(false);
    cin>>n>>k;
    for(int i=1;i<=n;i++) cin>>x[i];
    int pos=0;
    for(int i=1;i<=n;i++) if(x[i]==k) pos=i;
    for(int i=1;i<=n;i++) {
        if(x[i]>k) s[i]=1;
        if(x[i]

你可能感兴趣的:([CQOI2009] 中位数 - 桶)