题目——洛谷 P1627中位数
题目描述
给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b。中位数是指把所有元素从小到大排列后,位于中间的数。
输入输出格式
输入格式:
第一行为两个正整数n和b,第二行为1~n的排列。
输出格式:
输出一个整数,即中位数为b的连续子序列个数。
输入输出样例
输入样例1:
7 4
5 7 2 4 3 1 6
输出样例1:
4
说明
【数据规模】
对于30%的数据中,满足n≤100;
对于60%的数据中,满足n≤1000;
对于100%的数据中,满足n≤100000,1≤b≤n。
思路
标记一遍相对大小,大的标1,小的标-1。只要连续 n 项和为0,就能满足题目条件。
首先一遍找到中位数位置 pos,放个数组 flag 标记查找中的数与目标中位数的相对大小:
1 -> 比中位数大
-1 -> 比中位数小
0 -> 找到中位数!标记pos
还是举个实例吧……
数组:1 1 -1 -1 -1 pos