定义序列\(x_i = f([H_i >=x])\;\;\;\;其中f(0) = -1,f(1) = 1\),那么区间[i,j]满足条件当且仅当sum_j-sum_{i-1} > 0,即sum_j>sum_{i-1}

设\(g_d表示\sum_{i-1}^{n} [sum_i=d] , pre_d表示在d前面满足sum[i]<sum[d]的i的个数\)

考虑已求出\(g_{1..k-1} , pre_{1..k-1}\),现在要求\(pre_k\)

若\(sum_j > sum_{j-1}\) , 由此可得\(sum_j = sum_{j-1}+1\) , 则\(pre_j = pre_{j-1} + g_sum_{i-1} + 1 (1指sum_{i})\)

否则\(sum_j = sum_{j-1} -1\) ,由此可得\(pre_j = pre_{j-1} - g_sum_{i-1} + 1 (1指sum_{i})\)

代码如下

#include<iostream>
#include<cstdio>
using namespace std ;
#define ll long long
#define _ 1000005
ll sum[_] , num[_] , x,n,tmp,pre,ans; // num 即 g 数组 , pre使用滚动数组优化
int main(){
cin>>n>>x ;
for(int i=1;i<=n;++i){
cin>>tmp ;
sum[i] = sum[i-1] + ((tmp>=x)?1:-1) ;
}
num[0] = 1 ;
for(int i=1;i<=n;++i){
if(sum[i] > sum[i-1]) pre += num[sum[i]]+1 ;
else pre -= (num[sum[i-1]]-1) ;
num[sum[i]]++ ;
ans += pre ;
}
cout<<ans<<endl ;
}

Luogu P3031 高于中位数的更多相关文章

  1. luogu P3031 [USACO11NOV]高于中位数Above the Median (树状数组优化dp)

    链接:https://www.luogu.org/problemnew/show/P3031 题面: 题目描述 Farmer John has lined up his N (1 <= N &l ...

  2. luogu P1627 [CQOI2009]中位数

    传送门 要求有多少个长度为奇数的区间满足某个数为区间中位数 这样的区间,大于中位数的数个数 等于 小于中位数的数个数 用类似于前缀和的方法,设\(X_i\)为\(i\)和数\(b\)形成的区间内,大于 ...

  3. [LUOGU] P3871 [TJOI2010]中位数

    题目描述 给定一个由N个元素组成的整数序列,现在有两种操作: 1 add a 在该序列的最后添加一个整数a,组成长度为N + 1的整数序列 2 mid 输出当前序列的中位数 中位数是指将一个序列按照从 ...

  4. 【题解】Luogu P3871 [TJOI2010]中位数

    平衡树板题 原题传送门 这道题要用Splay,我博客里有对Splay的详细介绍 每次加入一个数,把数插入平衡树中 并且要记录一共有多少个数 每次查询就查询平衡树中第(总数-1)/2+1个数 十分暴力 ...

  5. Splay详解

    平衡树实际很简单的 以下讲解都以Luogu P3369 [模板]普通平衡树为例 我不会带指针的Splay,所以我就写非指针型的Splay Splay是基于二叉查找树(bst)实现的 什么是二叉查找树呢 ...

  6. html学习之二(常用标签练习)

    <!DOCTYPE html><head> <meta charset="utf-8"> <title>锚点链接</title ...

  7. 【Luogu P1168】【Luogu P1801&UVA 501】中位数&黑匣子(Black Box)——对顶堆相关

    Luogu P1168 Luogu P1801 UVA 501(洛谷Remote Judge) 前置知识:堆.优先队列STL的使用 对顶堆 是一种在线维护第\(k\)小的算法. 其实就是开两个堆,一个 ...

  8. Luogu P1627 中位数

    Luogu P1627 中位数 先记录目标数的位置,并且把数组映射为: $$a[i]=\begin{cases}-1,a[i]<b\0,a[i]=b\1,a[i]>b\end{cases} ...

  9. [luogu]P1168 中位数[堆]

    [luogu]P1168 中位数 题目描述 给出一个长度为N的非负整数序列A[i],对于所有1 ≤ k ≤ (N + 1) / 2,输出A[1], A[3], …, A[2k - 1]的中位数.即前1 ...

随机推荐

  1. mysql 免安装版密码操作

    登录MySQL:mysql -u root -p 1.修改用户密码: mysql> GRANT ALL ON . TO ‘root’@’localhost’ IDENTIFIED BY ‘123 ...

  2. Dockerfile详解,以及构建自定义镜像

    Dockerfile使用 前面的操作我们一直下载下载官方已经构建好的镜像,直接下载后就可以run,如果我们想要在镜像中添加自己的应用,比如在tomcat中添加自己的app,构建一个自定义的镜像,那么我 ...

  3. 2 —— js语法 —— 对象和方法的声明 。变量提升。闭包

    一,声明对象 var obj1 = {}; var obj2 = {name:'kk',age:18,fun:function{          // name,age,fun为对象的属性,只是属性 ...

  4. 洛谷 三月月赛 B

    搞出每一位与前一位的差,然后区间修改只是会影响区间的端点,所以只修改一下端点的值就好. %%%高一神犇线段树 #include<bits/stdc++.h> #define N 10000 ...

  5. 二十一、JavaScript之访问对象属性

    一.代码如下 二.执行效果如下 <!DOCTYPE html> <html> <meta http-equiv="Content-Type" cont ...

  6. 110-PHP类成员属性赋值

    <?php class mao{ //定义猫类 public $age=0; //定义多个属性并初始化 public $weight=50; public $color='white'; } $ ...

  7. js如何操作或是更改sass里的变量

    /*上网搜索了好多方法,最终只有这一种比较适合*/ 参考: https://blog.csdn.net/weixin_44392565/article/details/85755592 https:/ ...

  8. es6 part 1 //const let

    1. let 命令 ES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. { let a = 10; var b = 1; } a // ...

  9. UVA - 1614 Hell on the Markets(奇怪的股市)(贪心)

    题意:输入一个长度为n(n<=100000)的序列a,满足1<=ai<=i,要求确定每个数的正负号,使得所有数的总和为0. 分析: 1.若总和为0,则未加符号之前,所有数之和必为偶数 ...

  10. CSS - 实现荧光边框

    1,index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...