http://www.lydsy.com/JudgeOnline/problem.php?id=1303

依旧是题解流,,,不看题解没法活,,,第一眼就是瞎搞,然后就是暴力,显然TLE。。题解啊题解。。

这个特殊的技巧我不知道怎么抽象出来,,恩,,就说做法吧。。

首先读入的时候,小于b的赋值为-1,大于b的赋值为+1,并且用下标pos来索引b在数组的位置(1~n的排列哈~没看题的注意了)

然后用前缀和思想统计pos左边的前缀和和pos右边的前缀和,那么我们在统计的时候,只需要找(左边的一个前缀和+右边一个前缀和)==0的情况就行了,还不能理解吗?

怎么统计呢?我们再维护2个数组,l和r,l[i]表示左边所有sum[x]==i的数量,r[i]表示右边所有sum[x]==i的数量,根据乘法原理,将l[i]和r[0-i]乘起来就行了,累计乘积就是答案。

但是这里cpp是没有下标<0的情况的,所以我们要全部加到正的,(因为sum值可能=n,所以数组开到2n,来表示-n~n这个区间)

#include <cstdio>
#include <cstring>
#include <string>
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
#define for1(i,a,n) for(i=a;i<=n;++i)
#define for2(i,a,n) for(i=a;i<n;++i)
#define for3(i,a,n) for(i=a;i>=n;--i)
#define for4(i,a,n) for(i=a;i>n;--i)
#define CC(i,a) memset(i,a,sizeof(i))
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define read(a) scanf("%d", &a)
#define print(a) printf("%d", a) const int N=100005;
int w[N], l[N<<1], r[N<<1], sum[N], pos; int main() {
int i, n, b, ans=0;
read(n); read(b);
for1(i, 1, n) {
read(w[i]);
if(w[i]==b) pos=i, w[i]=0;
else w[i]=w[i]<b?-1:1;
}
l[n]=r[n]=1;
for3(i, pos-1, 1) sum[i]=sum[i+1]+w[i], l[n+sum[i]]++;
for1(i, pos+1, n) sum[i]=sum[i-1]+w[i], r[n+sum[i]]++;
for1(i, 0, n<<1) ans+=l[i]*r[(n<<1)-i];
print(ans);
return 0;
}

Description

给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b。中位数是指把所有元素从小到大排列后,位于中间的数。

Input

第一行为两个正整数n和b ,第二行为1~n 的排列。

Output

输出一个整数,即中位数为b的连续子序列个数。

Sample Input

7 4
5 7 2 4 3 1 6

Sample Output

4

HINT

第三个样例解释:{4}, {7,2,4}, {5,7,2,4,3}和{5,7,2,4,3,1,6}
N<=100000

Source

【BZOJ】1303: [CQOI2009]中位数图(特殊的技巧)的更多相关文章

  1. BZOJ 1303 CQOI2009 中位数图 水题

    1303: [CQOI2009]中位数图 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2340  Solved: 1464[Submit][Statu ...

  2. BZOJ 1303: [CQOI2009]中位数图【前缀和】

    1303: [CQOI2009]中位数图 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2737  Solved: 1698[Submit][Statu ...

  3. bzoj 1303: [CQOI2009]中位数图 数学

    1303: [CQOI2009]中位数图 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...

  4. [BZOJ 1303] [CQOI2009] 中位数图 【0.0】

    题目链接:BZOJ - 1303 题目分析 首先,找到 b 的位置 Pos, 然后将数列中小于 b 的值赋为 -1 ,大于 b 的值赋为 1 . 从 b 向左扩展,不断算 Sum[i, b - 1] ...

  5. bzoj 1303: [CQOI2009]中位数图

    题目链接 给n个数,一个值b, 统计所有以b为中位数的序列的个数.序列长度为奇数.数字在1-n之间, 每个数只出现一次. 如果一个数大于b, 那么将他赋值为1, 小于b赋值为-1, 记录数组中b出现的 ...

  6. BZOJ 1303: [CQOI2009]中位数图 【水题】

    给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b.中位数是指把所有元素从小到大排列后,位于中间的数. Input 第一行为两个正整数n和b ,第二行为1~n 的排列. Out ...

  7. BZOJ 1303: [CQOI2009]中位数图 问题转化_扫描_思维

    将比 b 大的设成 1,比 b 小的设成 -1,开个桶左右扫描一下,乘法原理乘一乘就好了. 虽然一眼切,不过这个基于中位数的转化还是相当重要的.middle 那个主席树的题也需要该做法 Code: # ...

  8. BZOJ 1303: [CQOI2009]中位数图(思路题)

    传送门 解题思路 比较好想的思路题.首先肯定要把原序列转化一下,大于\(k\)的变成\(1\),小于\(k\)的变成\(-1\),然后求一个前缀和,还要用\(cnt[]\)记录一下前缀和每个数出现了几 ...

  9. 1303: [CQOI2009]中位数图

    早起一AC,整天萌萌哒. Problem: 1303 User: forgot93 Language: C++ Result: Accepted Time:56 ms Memory:2108 kb * ...

随机推荐

  1. dell idrac8 部署操作系统的方法

    1,打开虚拟控制台 2,“虚拟介质”->“连接虚拟介质”->“映射虚拟介质到CD”->(选择要安装的镜像文件)->“Map device” 3, “next boot”-> ...

  2. 【GoLang】GoLang 微服务、开源库等参考资料

    参考资料: GoLang书籍: https://github.com/dariubs/GoBooksGo名库: https://github.com/Unknwon/go-rock-libraries ...

  3. 【OpenStack】OpenStack系列7之Nova详解

    源码下载.安装 参考: https://github.com/yongluo2013/osf-openstack-training/blob/master/installation/openstack ...

  4. JQuery $.ajax()方法详解

    jQuery Ajax 参考手册 实例 通过 AJAX 加载一段文本: jQuery 代码: $(document).ready(function(){ $("#b01").cli ...

  5. 写了一个字符串的二维表: TSta

    STA 单元 (用到 System.SysUtils.TStringHelper): --------------------------------------------------------- ...

  6. Java for LeetCode 024 Swap Nodes in Pairs

    Given a linked list, swap every two adjacent nodes and return its head. For example, Given 1->2-& ...

  7. JSTL分类查询

    index.jsp <%@ page language="java" import="java.util.*" pageEncoding="UT ...

  8. centos7下安装vsftpd配置

    0. 首先安装ftp服务 yum install -y ftp 1. 通过yum install -y vsftp安装vsftp 2.    修改vi /etc/vsftpd/vsftpd.conf, ...

  9. js 默认行为取消

    js 默认行为取消   可以简单的  return false;   看需求吧 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transit ...

  10. 网页制作技巧:iframe自适应高度

    转自:http://www.enet.com.cn/article/2012/0620/A20120620126237.shtml 通过Google搜索iframe 自适应高度,结果5W多条,搜索if ...