题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=4747

题目大意:

给n个数,求所有区间内没有出现的最小非负整数和。

解题思路:

首先感谢大神博客:http://www.cnblogs.com/xin-hua/p/3325154.html可以解释的太少了。

我再解释一遍。

首先要明白,以i结束的所有区间的值的和记为f[i]肯定不超过以i+1结束的所有区间的值的和记为f[i+1]。

所以可以根据f[i]间接推出f[i+1],记第i个数为sa[i],显然只用考虑大于等于sa[i]的数j对f[i]=f[i-1]+?的影响,。如果j出现在1~i-1区间中,比较j最晚出现的位置与覆盖完全的1~j-1的最小位置的较小位置k,那么区间j的前一次出现的位置到k位置这个区间内所有点到i位置的值都+1.

这样逐次累加,直到不影响为止。

代码:

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#include<ctime>
#define eps 1e-6
#define INF 0x3fffffff
#define PI acos(-1.0)
#define ll __int64
#define lson l,m,(rt<<1)
#define rson m+1,r,(rt<<1)|1
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;#define Maxn 210000int sa[Maxn],pos[Maxn],full[Maxn];int main()
{//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);int n;while(scanf("%d",&n)&&n){for(int i=1;i<=n;i++)scanf("%d",&sa[i]);memset(pos,0,sizeof(pos));memset(full,0,sizeof(full));int last;ll tt=0,ans=0;for(int i=1;i<=n;i++){if(sa[i]<n)//{last=pos[sa[i]];//前一个sa[i]的最晚位置pos[sa[i]]=i; //最晚位置for(int j=sa[i];j<n;j++){if(j) //考虑j对前面区间的影响full[j]=min(full[j-1],pos[j]); //elsefull[j]=i;if(full[j]>last)tt+=full[j]-last; //last+1到full[j]区间内所有点到i的值+1,逐次累加elsebreak;}}printf("i:%d %I64d\n",i,tt);ans+=tt;}printf("%I64d\n",ans);}return 0;
}

递推计数-hdu-4747-Mex相关推荐

  1. HDU 4489 (DP递推计数)

    DP 递推计数 题意: 这是一道比较神奇的题,很考验思维:有n个高低不同的人,现在需要进行排列,排列一定要满足两种方式 高低高··· 低高低··· 求出有多少排列方式. 思路: 我们的切入点是第i个人 ...

  2. HDU - 4747 Mex(线段树)

    题意: 计算    其中mex即为博弈中出现的mex(未出现的最小非负整数). 分析: 有两种方法,递推有点懵(以后再来补QAQ),就写了线段树 想法是每次求以i为起点的区间的mex值的和,最后累加即 ...

  3. 【算法讲26:特征方程】求齐次线性一阶递推与二阶递推通项公式 | HDU 2021多校一 Pass!

    [算法讲26:特征方程]求一阶递推与二阶递推通项公式 引入 齐次线性一阶递推 齐次线性二阶递推 题目解法 下文中详细证明略,可以看 [数列]特征方程与特征根 引入 HDU 2021多校一 Pass! ...

  4. hdu 4747 mex 线段树+思维

    http://acm.hdu.edu.cn/showproblem.php?pid=4747 题意: 我们定义mex(l,r)表示一个序列a[l]....a[r]中没有出现过得最小的非负整数, 然后我 ...

  5. HDU 4747 Mex

    4747 思路: 线段树 先求出mex(1,1), mex(1, 2) , mex(1,3),...,mex(1,n)(单调上升),先将这些mex放进线段树里求和 然后再求出next[i]表示下一次出 ...

  6. HDU 4747 Mex【线段树上二分+扫描线】

    [题意概述] 一个区间的Mex为这个区间没有出现过的最小自然数,现在给你一个序列,要求求出所有区间的Mex的和. [题解] 扫描线+线段树. 我们在线段树上维护从当前左端点开始的前缀Mex,显然从左到 ...

  7. 【递推】HDU -2018 母牛的故事斐波那契兔子数列

    函数之递归的应用 母牛的故事 (这个问题还有很多类似的,比如种树,每一年种的树品质在改变,当然区别在于树不能生孩子.. 相应的人类达到法定年龄就可以生孩子,这个和母牛问题一样,只不过时间间隔变化了. ...

  8. HDU 6185 Covering 矩阵快速幂 递推

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6185 题目描述: 一个4*n的矩形, 你用1*2的矩形覆盖有多少种方案, n <= 1e18 ...

  9. HDU 6092 Rikka with Subset 思维 递推

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6092 题目描述: 给你一个集合的所有子集各个和, 让你找到这个集合, 输出字典序最小 解题思路: 下 ...

  10. hdu 2013 蟠桃记-递推-[解题报告]C++

    蟠桃记 问题描述 : 喜欢西游记的同学肯定都知道悟空偷吃蟠桃的故事,你们一定都觉得这猴子太闹腾了,其实你们是有所不知:悟空是在研究一个数学问题! 什么问题?他研究的问题是蟠桃一共有多少个! 不过,到最 ...

最新文章

  1. 汉诺塔问题---小昝
  2. ip映射后 前端无法调用接口_基于S7300400 CPU集成PN接口的Modbus TCPW
  3. 地区省份城市sql信息
  4. android 后台邮件发送,Android邮件发送
  5. oracle里有limit怎么用,[ORACLE]ORACLE 实现mysql中的limit 功能
  6. 【ARM】Tiny4412裸板编程之蜂鸣器(C语言)
  7. 服务器硬盘 主板,服务器主板和普通主板有什么区别?
  8. 现代软件工程系列 学生读后感 梦断代码 SpringGreen
  9. python求两数之和的命令_数学建模:科学计算Python2小时-Python基础
  10. 最简易上手的numpy学习笔记二
  11. css3 呼吸的莲花_CSS3制作莲花盛开动画
  12. 2010年经典语录,我们全OUT了
  13. 用正则验证用户输入文本框的内容是否是中文汉字
  14. MAC使用find命令的正确办法
  15. MS SQL数据库置疑解决办法
  16. 腾讯AI开放平台使用尝试:通过文本翻译API进行汉译英
  17. 视频拍摄和剪辑经验分享|南京
  18. 利用idea 打包jar包
  19. 相机标定示例(OpenCV /C++ /matlab工具箱TOOLBOX_calib)
  20. DMS渠道管理系统:助力农产品行业实现精细化会员管理

热门文章

  1. 计算机总自动开机 如何关闭,手把手教你win10电脑关机后自动开机怎么解决
  2. 计算机小高考要点,小高考的复习计划
  3. 奇虎360与腾讯之争再现高潮
  4. Sentinel控制台实时监控空白
  5. U盘修复“系统找不到指定文件”问题解决方法
  6. Oracle 行转列的坑
  7. linux执行历史命令用哪个键,Linux中如何使用history命令即历史命令
  8. 百度统计、谷歌统计原理以及自定义统计源码
  9. 2022A特种设备相关管理(电梯)特种作业证考试题库及在线模拟考试
  10. Vue实现excel文件下载