题目描述
给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b。中位数是指把所有元素从小到大排列后,位于中间的数。
输入格式
第一行为两个正整数n和b,第二行为1~n的排列。
【数据规模】
对于30%的数据中,满足n≤100;
对于60%的数据中,满足n≤1000;
对于100%的数据中,满足n≤100000,1≤b≤n。
输出格式
输出一个整数,即中位数为b的连续子序列个数。
输入输出样例
输入 #1复制
7 4 5 7 2 4 3 1 6
输出 #1复制
4
这是其实是个水题,因为中位数都告诉你了,无非就两种情况:1、以该中位数为边界的序列,2、包含这个中位数的序列。只需要用一个标记数组记录每个数与所给中位数的相对大小(大于记为1,小于记为-1),然后以那个指定的中位数的位置向两边分别遍历一遍,记录标记数组的累加和,和为零时就为一个满足要求的序列(情况1),遍历另一边时不仅要考虑情况1,还要再加上指定中位数左边连续和能和当前连续和相抵消的序列(加起来为零)的个数(用sum[]记录的,因为可能会减出负数,所以sum的下标再加上一个maxn)(情况2)
完整代码:
#include <bits/stdc++.h>
using namespace std;
cons