Description
给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b。中位数是指把所有元素从小到大排列后,位于中间的数。
Input
第一行为两个正整数n和b,第二行为1~n的排列。
【数据规模】
对于30%的数据中,满足n≤100;
对于60%的数据中,满足n≤1000;
对于100%的数据中,满足n≤100000,1≤b≤n。
Output
输出一个整数,即中位数为b的连续子序列个数。
Sample Input
7 4
5 7 2 4 3 1 6
Sample Output
4
题解
因为这道题不关心数据具体为多少,只关心每个数比b大或小,
所以首先在读入的时候就忽视数据绝对大小,只存相对b的大小
(小于b存-1 等于b存0 大于b存1
O(n^2):
枚举区间长度L和左端点i 利用前缀和可以O(1)得到区间和 易知区间和为0的话在这个区间内b为中位数
(证明:因为区间和为0 所以在这个区间内的-1数量和1的数量相等 也就是比b小的和比b大的数一样多)
期望60,却因为数据巨水搞到90(喵喵喵?)
本来打算卡一波常A掉然后发n方题解哈哈哈哈
90分代码:
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
inline int read()
{
char ch=getchar();
int x=0;bool s=1;
while(ch<'0'||ch>'9'){
if(ch=='-')s=0;ch=getchar();}
while(ch>=