题目
- 原题地址:中位数图
- 题目编号:NC19913
- 题目类型:差分、前缀和
- 时间限制:C/C++ 1秒,其他语言2秒
- 空间限制:C/C++ 262144K,其他语言524288K
1.题目大意
- 给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b。
2.题目分析
- 比b大的设为1,比b小的设为-1;
- 找到b的位置,分别向左向右计算sum;
- 先算左面每个sum的个数,把sum为0的先加上(b本身一个元素也符合题意)
- 在计算右面的sum时把可以与左面匹配(sum值互补)的个数加到答案里。
3.题目代码
#include
using namespace std;
int a[100005];
int c[200005];
int f[100005];
int ans;
int main() {
int n, b;
cin >> n >> b;
int pos, sum = 0;
int ans = 0;
for(int i=0;i> a[i];
if(a[i]==b)
pos = i;
else
f[i] = a[i]=0;i--)
{
sum += f[i];
c[n-sum]++;
}
c[n]++;
ans += c[n];
sum = 0;
for(int i=pos+1;i