枚举 · 例9-中位数图(前缀和)

枚举 · 例9-中位数图
理解为子串更好,按照题意是连续的,一开始有些误导.所以应当自然想到前缀和,以b数值为分界点

#include <bits/stdc++.h>

using namespace std;

const int N = 100010;

int a[N], num[N*2];

signed main(){
    int n, b; cin >> n >> b;
    int index;
    for(int i = 0; i < n; ++i){
        cin >> a[i];
        if(a[i] == b) index = i;
        if(a[i] < b) a[i] = -1;
        if(a[i] > b) a[i] = 1;
    }
    int sum = 0, res = 1;
    for(int i = index - 1; i >= 0; --i){
        sum += a[i];
        if(sum == 0) ++res;
        num[sum + n]++;
    }
    sum = 0;
    for(int i = index + 1; i < n; ++i){
        sum += a[i];
        if(sum == 0) ++res;
        res += num[n - sum];
    }
    
    cout << res << endl;
    
    return 0;
}
posted @ 2025-03-26 11:48  awei040519  阅读(18)  评论(0)    收藏  举报