1303: [CQOI2009]中位数图

Time Limit: 1 Sec  Memory Limit: 162 MB
Submit: 1969  Solved: 1264
[Submit][Status][Discuss]

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

在不考虑数据范围的情况下,用连续字段和,大概2000以内的数据都能过,但是这题数据居然给到了100000,那么暴力是解决不了问题了。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

这是一个分外机智的思路。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

把比b大的定为1,把b小的定为-1,等于b的定为0,这道题就变成了,求在给的数字段里边找到连续的奇数个数,并且和为0,我们用一个cnt数组来记录当前所有数字的和,即cnt[i]=cnt[0]+cnt[1]+......cnt[i],那么只要cnt[i]==0并且i为奇数,肯定满足,但是其他情况也需要考虑,即不是从头开始的,但是有一段的和等于0,这是就得分情况了,如果这一连续的段为奇数,那么肯定符合,如果是偶数就肯定不符合,我们用a数组表示当i为奇数使前i个数的和是否出现过,1为出现过,0 表示未出现,用数组b表示i为偶数时的情况,那么问题来了,如果对于同一个数,a数组里边出现过,b数组里边也出现过,是不是说明了,给定的数字串在某一个奇数区间里边的和为0,那么问题便得到了解决,详细见代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int a[110000*2],b[110000*2],cnt[110000],t,i,j,k,l,m,n;
int main()
{while(scanf("%d%d",&n,&m)!=EOF){memset(cnt,0,sizeof(cnt));memset(a,0,sizeof(a));memset(b,0,sizeof(b));int ans=0;for(i=1;i<=n;i++){scanf("%d",&k);if(k>m)l=1;if(k==m)l=0;if(k<m)l=-1;cnt[i]+=cnt[i-1]+l;//记录前i个数的和 if(cnt[i]==0&&i%2)ans++;//如果满足,直接相加即可 if(i%2){ans+=a[cnt[i]+n];//加上偶数时当前和出现的次数 b[cnt[i]+n]++;//标记当i为奇数时,当前这个和出现过 ; }if(i%2==0){ans+=b[cnt[i]+n];//加上奇数时当前和出现的次数 a[cnt[i]+n]++;//标记i为 偶数时,当前这个和出现过 } }printf("%d\n",ans);}
}

bzoj1303[CQOI2009]中位数图相关推荐

  1. [bzoj1303][CQOI2009]中位数图

    来自FallDream的博客,未经允许,请勿转载,谢谢. 给定一个n个数排列,求有多少段长度为奇数的区间,中位数是b. n<=100000 时间限制0.1s 我一开始没看到排列,想着怎么还能O( ...

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

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

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

    1303: [CQOI2009]中位数图 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 2747  Solved: 1704 [Submit][Sta ...

  4. [CQOI2009]中位数图

    [CQOI2009]中位数图 这是一道OI真题,我们来看看题目: 顺便放下地址吧:[CQOI2009]中位数图 读了题目之后发现直接枚举是不行的,会超时,那么我们就得换种思路了,我们可以把大于目标数的 ...

  5. [CQOI2009]中位数图 详细题解

    题目链接: https://ac.nowcoder.com/acm/problem/19913 题目描述: 给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b.中位数是指把所有 ...

  6. 牛客网【每日一题】5月22日 [CQOI2009]中位数图

    链接: 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 给出1~n的一个排列,统计该排列有 ...

  7. 【CQOI2009】中位数图

    Powered by:NEFU AB-IN [CQOI2009]中位数图 题意 给出 1 − n 1-n 1−n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是 b b b. 中位数是指 ...

  8. [CQOI2009] 中位数 (前缀和)

    [CQOI2009] 中位数 题目描述 给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b.中位数是指把所有元素从小到大排列后,位于中间的数. 输入输出格式 输入格式: 第一行 ...

  9. 2019.4.summary

    2019.4.1 BZOJ1061: [Noi2008]志愿者招募 真心有点难QAQ https://www.byvoid.com/zhs/blog/noi-2008-employee 看void爷的 ...

最新文章

  1. 根据镜像安装oracle插件,docker镜像alpine中安装oracle客户端
  2. 联想S820 MIUI刷机包 MIUI 4.4.30 流畅执行 在线主题破解
  3. Mobile first! Wijmo 5 + Ionic Framework之:Hello World!
  4. 二十一、String、StringBuffer和StringBuilder的区别是什么?
  5. javascript做极简时钟特效,再简单没思路你也做不出来
  6. mysql 表ful,你所不知的table is full那些事
  7. 【CodeForces - 722D】Generating Sets(二分,贪心)
  8. ddos常见攻击报文
  9. redhat linux 5 nfs
  10. SpringCloud Sentinel 熔断降级、热点参数限流、与系统自适应限流介绍与配置
  11. 京东健康暗盘涨幅超27% 成交额超1.6亿港元
  12. 自创解决键盘最后退出的问题
  13. css改火狐滚动条样式_自定义滚动条,可解决火狐滚动条默认样式修改不了问题...
  14. 模因(meme)收集
  15. mac 查看本机ip地址命令
  16. 泊松分布 二项分布 正态分布之间的联系,与绘制高斯分布图
  17. 怎么用nginx搭建文件服务器,使用nginx搭建简单文件服务器
  18. “水晶糖果字体”练习
  19. From Word Embeddings To Document Distances论文总结
  20. 使用DGL实现基于闲鱼图进行边分类算法

热门文章

  1. idea解决编译时出现的未结束的字符文字等错误
  2. DCMTK3.5.4与3.6.0版本的区别
  3. 微软取消被指下流的Windows 10更新方法
  4. Spring boot配置log4j
  5. 微服务之旅的经验分享
  6. 使用PowerShel导入和导出Hyper-v虚拟机
  7. 创建线程的函数CreateThread
  8. vmware下ubuntu 鼠标不起作用解决方法
  9. delete指针的含义
  10. OpenXml开发-向Excel2007文档中添加数据