题意:

      给你N个数字组成的数列,然后问你这里面有多少个是以M为中位数的子序列。


思路:

      首先分四中简单的情况求

       (1) 就是只有他自己的那种情况 那么sum+1

       (2) 从自己开始向左延伸,x, x - 1, x - 2 ...这种可以记录大于m的个数max和小于m的个数min当两个数相等的时候(min == max)就 sum++,然后在这样 mark[max - min]++;记录差值产生的次数,可以开两个数组,一个寸正差,一个存负差,或者直接开一个容器,我开的是容器,这个地方随意

       (3) 从自己开始向又延伸,跟上面的操作一样,唯独就是在mark[max - min]++那不一样,这一步不用记录差值的出现次数,而是直接算 sum += mark[min-max],这里很简单,就是优化了暴力,这个题目如果直接暴力是O(n^2)的,这样算出来是O(N)的。不是很难理解就不多解释了,还不懂得看看下面的代码就懂了,水题一道。

#include<stdio.h>
#include<map> #define N 44000

using namespace
std; map<int ,int>mark; int num[N] ,L[N] ,R[N]; int main ()
{
int
sum ,n ,m ,i ,mk;
while(~
scanf("%d %d" ,&n ,&m))
{
for(
i = 1 ;i <= n ;i ++)
{

scanf("%d" ,&num[i]);
if(
num[i] == m) mk = i;
}

mark.clear();
sum = 0;
int
min = 0,max = 0;
for(
i = mk + 1 ;i <= n ;i ++)
{

num[i] < m ? min++ : max++;
if(
min == max) sum ++;
mark[max - min] ++;
}

min = 0 ,max = 0;
for(
i = mk - 1 ;i >= 1 ;i --)
{

num[i] < m ? min ++ : max ++;
if(
min == max) sum ++;
sum += mark[min - max];
}

printf("%d\n" ,sum + 1);
}
return
0;
}

hdu4908 中位数子串的更多相关文章

  1. 8.3-8.7 usaco

    summary:38 vijos1002:青蛙跳河. dp+压缩.距离大于100可以直接%100.然后数据范围小了很多可以dp了. #include<cstdio> #include< ...

  2. hdu4908(中位数)

    传送门:BestCoder Sequence 题意:给一个序列,里面是1-N的排列,给出m,问以m为中位数的奇数长度的序列个数. 分析:先找出m的位置,再记录左边比m大的状态,记录右边比m大的状态,使 ...

  3. HDU4908——BestCoder Sequence(BestCoder Round #3)

    BestCoder Sequence Problem DescriptionMr Potato is a coder.Mr Potato is the BestCoder.One night, an ...

  4. 题目1004:Median(查找中位数)

    问题来源 http://ac.jobdu.com/problem.php?pid=1004 问题描述 给你两个非降序序列,让你求中位数.中位数为第(n+1)/2个数(从0开始计算). 问题分析 这个问 ...

  5. Leetcode(5)最长回文子串

    Leetcode(4)寻找两个有序数组的中位数 [题目表述]: 给定一个字符串 s,找到 s 中 最长 的回文子串.你可以假设 s 的最大长度为 1000.' 第一种方法:未完成:利用回文子串的特点 ...

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

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

  7. LeetCode[5] 最长的回文子串

    题目描述 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...

  8. 最长回文子串-LeetCode 5 Longest Palindromic Substring

    题目描述 Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...

  9. C语言计算字符串子串出现的次数

    #include<stdio.h>#include<string.h>int substring(char *str,char *str1);//函数原型int main(vo ...

随机推荐

  1. CRLF注入漏洞 -配置错误

    漏洞分析参考 https://i-beta.cnblogs.com/posts/edit 什么是CRLF? CRLF 指的是回车符(CR,ASCII 13,\r,%0d) 和换行符(LF,ASCII ...

  2. CVE-2016-10033 WordPress <= 4.6 命令执行漏洞

    漏洞参考 https://www.jianshu.com/p/85ac4af9f947 漏洞信息 这个锅还是要PHPMailer背(CVE-2016-10033,WordPress 使用 PHPMai ...

  3. 浅析MyBatis(二):手写一个自己的MyBatis简单框架

    在上一篇文章中,我们由一个快速案例剖析了 MyBatis 的整体架构与整体运行流程,在本篇文章中笔者会根据 MyBatis 的运行流程手写一个自定义 MyBatis 简单框架,在实践中加深对 MyBa ...

  4. for-in 语句

    for-in 语句循环专门用于遍历范围,列表,元素和字典等可迭代对象. 循环中的变量的值受for-in循环控制,该变量将会在每次循环开始时自动被赋值,因此程序不应该在循环中对该变量进行赋值 for-i ...

  5. find文本处理(locate)实例学习记录

    find文本处理(locate)实例学习记录 (一)按文件名称查找 按照文件名称查找是 find 最常见的用法,需要注意的是,搜索的文件名必须完全匹配,才能找到对应的文件. 1. 查找当前目录下所有 ...

  6. python函数之闭包函数与无参装饰器

    一.global与nonlocal #global x = 1 def f1(): global x # 声明此处是全部变量x x = 2 print(x) f1() # 调用f1后,修改了全局变量x ...

  7. python那些需要知道的事儿——逻辑运算与比大小

    一.逻辑运算 逻辑运算符: and   or   not,结果为布尔值(True和False) 1.基本逻辑运算符介绍 not :将后面的逻辑运算结果取反 >>> not 1 < ...

  8. 什么是事务?事务的四个特性(ACID)?并发事务带来哪些问题?事务隔离级别都有哪些?事务的传播特性

    什么是事务? 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事物的四个 ...

  9. Redis系列-存储篇sorted set主要操作命令

    Redis系列-存储篇sorted set主要操作函数小结 redis支持有序集合,即sorted set.sorted set在set的基础上,增加了排序属性,是set的升级版.这里简要谈谈sort ...

  10. angularjs 图片上传

    <input type="file" file-model="myFile"/><div class="col-md-12" ...