枚举 · 例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;
}

浙公网安备 33010602011771号