题目链接: https://ac.nowcoder.com/acm/problem/19913
题目描述:
给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b。中位数是指把所有元素从小到大排列后,位于中间的数。
题解:
因为中位数是位于一个序列中最中间的数字了,所以这个序列左边的数的个数是要等于它右边的个数的,所以我们可以把序列给替换成1和-1的序列,大于这个数的换成1,小于这个数的换程-1,这样的话我们可以分为三种情况来统计这个序列的个数
1.0到pos-1
2.pos+1到n-1
3.0到pos到n-1
(因为序列必须是连续的)第一种情况好统计,也就是说我们找一个sum来记录从pos-1位置往前走,每走一步加一下(已经改过的a[i]),当sum=0的时候就意味着大于m的数和小于m的数相等,故sum++;
当然第二种情况也可以由上面的那种方法进行统计。
但是最后一种情况怎么统计呢,我们可以在统计第一种情况的时候顺便统计cnt[maxn+sum]++,这个代表着什么呢,也就是说这个后缀和为maxn+sum的总序列数到底有多少个,故,我们在进行第三种情况的统计时,当maxn-sum,也就是说,假设走到某个位置,此时从pos到这个位置sum的相反数的序列情况有几种,(这个相反数的序列总数在第一种情况已经统计过了),所以我们在统计第二种情况的时候顺便可以统计第三种情况了,ans+=cnt[maxn-sum],为什么时-sum,因为我们要大于m的数正好等于小于m的数,才能保证m是中位数。

#pragma GCC optimize(3,"Ofast","inline")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <math.h>
#include <string>
#include <list>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>
#include <stdlib.h>
#include <vector>
const int maxn = 1e5+10;
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const int mod = 1000007;
using namespace std;
int a[maxn];
int cnt[maxn*2];
int main()
{int n,m,pos;cin>>n>>m;for(int i=0;i<n;i++){scanf("%d",&a[i]);if(a[i]>m) a[i]=1;else if(a[i]<m) a[i]=-1;else a[i]=0,pos=i;}int sum=0,ans=0;for(int i=pos-1;i>=0;i--){sum+=a[i];if(sum==0) ans++;cnt[maxn+sum]++;}sum=0;for(int i=pos+1;i<n;i++){sum+=a[i];if(sum==0) ans++;ans+=cnt[maxn-sum];}cout<<ans+1<<endl;return  0;
}

[CQOI2009]中位数图 详细题解相关推荐

  1. bzoj1303[CQOI2009]中位数图

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

  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. 牛客网【每日一题】5月22日 [CQOI2009]中位数图

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

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

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

  7. 【CQOI2009】中位数图

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

  8. CTF-Web小白入门篇超详细——了解CTF-Web基本题型及其解题方法 总结——包含例题的详细题解

    很久之前经过一次比赛的打击,决定不能只是一直盲目的刷基础题,应该加快进度,从各种基本题型开始下手,每种题型都应该去找题目刷一刷,并做好总结.于是我去搜了一些总结的文章,便找到了一篇很好的,觉得看完后有 ...

  9. 函数调用关系图如何画_彩铅画入门植物教程 | 如何用彩铅画一株多肉?多肉彩铅画教程步骤图详细...

    画画不难,难的是不拿起手中的笔去画. 彩铅画入门植物教程 | 如何用彩铅画一株多肉?多肉彩铅画教程步骤图详细 多肉的质感如何表达呢?还是那句话:艺术来源于生活,要仔细观察.拿我们今天画的多肉来说,首先 ...

最新文章

  1. win7下安装dynamips完全版
  2. 乐鑫代理启明云端分享| ESP32系列教程之五: Eclipse搭建esp-idf环境
  3. Ubuntu16.04 安装LaTex并配置中文环境
  4. development period
  5. 如何在Linux下彻底卸载MySQL?
  6. 动平衡仪制作方法总结
  7. STM32F401 / STM32F411 WeAct Studio 资料以及翻版说明
  8. 闰月算法c语言,公历转农历算法-C语言
  9. C++类内静态成员的内存释放问题
  10. PS 滤镜算法原理 ——马赛克
  11. channel的用法
  12. 一款国产的自动摘要在线工具-文皮皮
  13. 解决:电脑屏幕每隔几分钟就闪一次(瞬间黑屏一次),鼠标指针伴随着加载的状态(漏斗或者转圈),然后瞬间恢复正常
  14. docker安装和启动
  15. 《Java并发编程的艺术》——Java并发的前置知识(笔记)
  16. 《谈判力》读书笔记:第四章 为共同利益提供多种解决方案
  17. 益达教你如何抓取Ajax动态页面
  18. R语言中如何导入元素两两之间的距离数据
  19. 2----Android手机小白知识全集!! 刚入手
  20. 微信小程序进行加减法运算的小技巧

热门文章

  1. 在面向数据流的设计方法中,一般把数据流图中的数据流划分为 (16) 两种。 答案:C
  2. 必看干货:如何在 JavaScript 中实现 8 种基本图形算法
  3. 优化你的CPU来做深度学习
  4. 从零开始一起学习SLAM | 理解图优化,一步步带你看懂g2o代码
  5. 【OpenCV 4开发详解】窗口交互操作
  6. 王坚十年前的坚持,才有了今天世界顶级大数据计算平台MaxCompute
  7. 《JavaScript设计模式与开发实践》模式篇(12)—— 装饰者模式
  8. JAVA高级特性--自动拆箱-装箱,枚举类型
  9. 面试题: 难点 已看1
  10. 公路修建问题(二分+最小生成树)