题意:把n分为 均分为m 段 每段n/m个数字  每段可以选一个最大的数 求这些数相加起来>k的最小的m

解题思路:这道题本来想用二分+rmq的,但discuss里面说二分是错的,所以只能另想别的办法了。

首先是可以肯定的,一定要枚举段数,接下来就是如何减少对内层循环的枚举次数。

当分成i段得到的段长L1 与 之前分成 i-1段得到的段长相同  那就只要把前一次的结果再加上这一次 第i段的最大值  就是当前的结果了   这一步少做了很多步骤 节约了很多时间

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;const int maxn = 200005;
int n,m,a[maxn],dp[maxn][20];void init()   // 从点i开始   长1<<j     的最大值
{for(int i = 1; i <= n; i++)dp[i][0] = a[i];for(int j = 1; (1<<j) <= n; j++)for(int i = 1; i + (1<<j) - 1 <= n; i++)dp[i][j]=max(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);
}int rmq(int l,int r)
{int k = (int)(log(r - l + 1.0) / log(2.0));return max(dp[l][k],dp[r-(1<<k)+1][k]);
}int solve()
{int prev = -1,sum,j,left,right;for(int i = 1; i <= n; i++)//段数{int l = n / i;if(prev != l)   {j = 1; sum = 0;}while(j <= i){left = (j-1) * l + 1;right = j*l;sum += rmq(left,right);if(sum > m)return i;j++;}prev = l;}return -1;
}int main()
{while(scanf("%d%d",&n,&m),n != -1,m != -1){for(int i = 1; i <= n; i++)scanf("%d",&a[i]);init();printf("%d\n",solve());}return 0;
}

hdu 3486(RMQ+高效枚举)相关推荐

  1. hdu 5247(RMQ+枚举)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5247 解题思路:这道题要求区间的连续性,可以用RMQ解决.首先可以确定的是如果区间的和必须是满足等差数 ...

  2. HDU 3486 Interviewe RMQ

    题意: 将\(n\)个数分成\(m\)段相邻区间,每段区间的长度为\(\left \lfloor \frac{n}{m} \right \rfloor\),从每段区间选一个最大值,要让所有的最大值之和 ...

  3. HDU - 6305 RMQ Similar Sequence(笛卡尔树)

    http://acm.hdu.edu.cn/showproblem.php?pid=6305 题目 对于A,B两个序列,任意的l,r,如果RMQ(A,l,r)=RMQ(B,l,r),B序列里的数为[0 ...

  4. hdu 4309(最大流+枚举状态)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4309 思路:2^12枚举修复哪些桥,不修复的桥没有花费,连接的边流量为1,要修复的桥则计算花费,边的流 ...

  5. hdu 2363(最短路+枚举)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2363 思路:和之前hdu上做过的一题很像...就是先求求出所有的高度差,排序后枚举,每次都一次spfa ...

  6. HDU 4445 Crazy Tank --枚举

    题意: n个物体从高H处以相同角度抛下,有各自的初速度,下面[L1,R1]是敌方坦克的范围,[L2,R2]是友方坦克,问从某个角度抛出,在没有一个炮弹碰到友方坦克的情况下,最多的碰到敌方坦克的炮弹数. ...

  7. hdu 5172(RMQ+前缀和)

    题意:判断一个区间[l,r]的数是否是1到(r-l+1). 解题思路:首先判断该区间内的和是否是n*(1+n)/2,这里可以用前缀和判断. 接下来是要判断该区间内无重复的数: pos[i]表示第i个数 ...

  8. HDU - 3486 Interviewe(RMQ-st表+暴力)

    题目链接:点击查看 题目大意:给出n个点代表n个面试者,每个点的点权代表每个面试者的能力值,现在老板要求将n个人分成m组,每组有n/m个人,多出来的余数的那些人舍弃掉了,现在要让这m个组中的最大值相加 ...

  9. HDU - 1796——容斥原理+二进制枚举

    [题目描述] Now you get a number N, and a M-integers set, you should find out how many integers which are ...

最新文章

  1. Markdown拾遗
  2. PAT A1030 动态规划
  3. [洛谷2月月月赛]富金森林公园
  4. html 渐变透明写法,CSS3透明度+渐变
  5. java 热补丁_Android热补丁之AndFix原理解析
  6. VTK:Picking之CellPicking
  7. Android 动画(一)---布局动画
  8. jQuery 1.2 带来的兼容问题及对策
  9. 错误录入 算法_如何使用验证错误率确定算法输出之间的关系
  10. 鸿星尔克向河南博物院捐款100万元用于灾后重建
  11. mac 重置mysql root密码_MAC重置MySQL root 密码
  12. 交互设计[小插曲]--网站UI配色
  13. Unity笔记——1.Unity3D脚本基础
  14. 基于JAVA高校实习实训管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
  15. 偏最小二乘法(SIMPLS---未简化)
  16. 手把手教你搞懂麦克风的技术指标
  17. vptr初始化语义学
  18. python cox模型_Cox模型的基本概念_Python数据分析系列视频课程--玩转统计模型_数据挖掘与分析视频-51CTO学院...
  19. VisionMobile:Apple和三星利润的秘诀
  20. 《Real-Time Rendering 4th Edition》全文翻译 - 第6章 纹理化(上)6.1 ~ 6.3

热门文章

  1. 华硕h410csm怎么开启_主板BIOS中的launch CSM选项灰色无法更改的解决方法
  2. 【干货下载】大数据分析——如何消除金融不确定性
  3. 【PHP】php生成一个不重复的数字(订单号、会员号)
  4. 不让复制是不可能的----js获取选中文字
  5. [BZOJ] 3191 [JLOI2013]卡牌游戏
  6. http头部content-type与数据格式
  7. Java窗口(JFrame)从零开始(8)——文本框+文本域+密码框
  8. OC高效率52之理解OC错误模型
  9. 64位LINUX下hadoop2.2.0重新编译及安装步骤
  10. SharePoint 2013 Search REST API 使用示例