/*多么变态的一道题,交了18次*/

 #include<cstdio>
#include<cstring>
#include<cmath>
#define max(a,b) (a>b?a:b)
int dp[][],llog2[];//用llog2数组进行优化
int n,k; void DpMax(){
for(int j=;j<=llog2[n]+;j++){//llog2
for(int i=;i+(<<j)-<=n;i++){
dp[i][j]=max(dp[i][j-],dp[i+(<<(j-))][j-]);
}
}
} int GetMax(int L,int R){
int j=llog2[R-L+];//llog2
return max(dp[L][j],dp[R-(<<j)+][j]);
} int work(){
int pre_num = -, pre_tot = -, pre_sum;
for(int i = ; i <= n; ++i) //分成i组
{
int num = n / i; //每组num个
int sum = num * i; //总的多少人
int tot = ;
if(num == pre_num) //如果和前一次一样则从前一次继续累加即可
{
tot = pre_tot;
for(int j = pre_sum + num; j <= sum; j+= num)
{
tot += GetMax(j - num + , j);
if(tot > k)
return i;
}
pre_tot = tot;
pre_sum = sum;
}
else
{
for(int j = num; j <= sum; j += num)
{
tot += GetMax(j-num+, j);
if(tot > k)
return i;
}
pre_num = num;
pre_tot = tot;
pre_sum = sum;
}
}
return -;
} int main(){
for(int i=;i<;++i){//llog2
llog2[i]=(i&(i-))==?llog2[i-]+:llog2[i-];
}
while(scanf("%d%d",&n,&k),n>||k>){
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++){
scanf("%d",&dp[i][]);
}
DpMax();
printf("%d\n",work());
}
}

HDU3486 RMQ的更多相关文章

  1. *HDU3486 RMQ+二分

    Interviewe Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  2. [hdu3486]rmq+枚举优化

    题意:给n个数,求最小的段数,使得每一段的最大值之和大于给定的k.每一段的长度相等,最后若干个丢掉. 思路:从小到大枚举段数,如果能o(1)时间求出每一段的和,那么总复杂度是O(n(1+1/2+1/3 ...

  3. BZOJ 3489: A simple rmq problem

    3489: A simple rmq problem Time Limit: 40 Sec  Memory Limit: 600 MBSubmit: 1594  Solved: 520[Submit] ...

  4. UVA 11235Frequent values(RMQ)

    训练指南P198 题意:给出一个非降序排列的整数数组a1, a2…… an,你的任务是对于一系列询问(i,j),回答ai, ai+1 ……aj 中出现的次数最多的次数 这题不仅学到了rmq的应用还学到 ...

  5. 51nod1174(RMQ)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1174 题意:中文题诶- 思路:RMQ模板题 关于RMQ: h ...

  6. 2016 ACM/ICPC Asia Regional Dalian Online 1008 Function 二分+RMQ

    Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submissio ...

  7. Gym 100646 F Tanks a Lot RMQ

    Problem F: Tanks a Lot Imagine you have a car with a very large gas tank - large enough to hold what ...

  8. (RMQ版)LCA注意要点

    inline int lca(int x,int y){ if(x>y) swap(x,y); ]][x]]<h[rmq[log[y-x+]][y-near[y-x+]+]])? rmq[ ...

  9. 洛谷P2412 查单词 [trie树 RMQ]

    题目背景 滚粗了的HansBug在收拾旧英语书,然而他发现了什么奇妙的东西. 题目描述 udp2.T3如果遇到相同的字符串,输出后面的 蒟蒻HansBug在一本英语书里面找到了一个单词表,包含N个单词 ...

随机推荐

  1. Android开发 内存泄露检测框架LeakCanary

    前言 挖坑后续填坑 中文网站:https://www.liaohuqiu.net/cn/posts/leak-canary-read-me/ gitbub:https://github.com/squ ...

  2. windows10 vs2019 + opencv 3.4.7环境搭建

    windows vs2019 + opencv 3.4.7环境搭建 安装Opencv 3.4.7 下载 Opencv 第1步 进入 opencv releases 页面,点击 "Window ...

  3. CSS3 学习笔记(动画 多媒体查询)

    动画 1.@keyframes规则用于创建动画.在@keyframes中规定某项CSS样式,就能创建由当前样式逐渐改为新样式的动画效果 2.使用animation进行动画捆绑.两个值:动画名称.时长 ...

  4. python网络框架Twisted

    什么是Twisted Twisted是一个用python语言写的事件驱动网络框架,它支持很多种协议,包括UDP,TCP,TLS和其他应用层协议,比如HTTP,SMTP,NNTM,IRC,XMPP/Ja ...

  5. iOS之CAEmitterLayer粒子引擎

    1.CAEmitterCell粒子发射器的相关属性: /* CoreAnimation - CAEmitterLayer.h Copyright (c) 2007-2017, Apple Inc. A ...

  6. python3-常用模块之random

    random 1.取随机小数 : 数学计算# print(random.random()) # 取0-1之间的小数# print(random.uniform(1,2)) # 取1-2之间的小数 2. ...

  7. 第一个简单netty程序

    一个简单的netty的程序,主要是netty的客户端和服务端通信. 大部分说明都写在代码注释中 netty server TimeServer import io.netty.bootstrap.Se ...

  8. SQLServer 2008 的数据库日志清理

    -- SQLServer 2008 的数据库日志清理 ,与 Sql2000 或 2005 的方法不一样,需要采用 下面的sql来清理 USE [master] GO ALTER DATABASE [数 ...

  9. Java校验时间段重叠

    1.需求 要求保存每一条数据的startTime.endTime的中间时间段是唯一的,跟其他数据时间段不能存在冲突 比如: (2019-03-01 -> 2019-03-03 )  (2019- ...

  10. phalcon常用语法

    打印SQL //在config/service.php中注册服务 $di->set( 'profiler', function () { return new \Phalcon\Db\Profi ...