#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = + ;
int a[maxn];
int maxsum[maxn][];
int n, k; void RMQ(int num){
for (int i = ; i <= num; i++){
maxsum[i][] = a[i];
} for (int j = ; j < ; j++){
for (int i = ; i <= num; i++){
if (i + ( << j) - <= num){
maxsum[i][j] = max(maxsum[i][j - ], maxsum[i + ( << (j - ))][j - ]);
}
}
}
return;
} //获取[x,y]的最大值
int getmax(int x, int y){
int k1 = (int)(log((double)(y - x + )) / log(2.0));
return max(maxsum[x][k1], maxsum[y - ( << k1) + ][k1]);
} //获取m人的最大值(m组)
int Find(int m){
int ans = ;
int num = n / m;//每组num个人
for (int i = ; i < m; i++){
ans += getmax( + i*num, (i + )*num);
if (ans > k)
return ans;
}
return ans;
} int main(){
while (~scanf("%d%d", &n, &k)){
if (n == - && k == -)
break;
int sum = ;
bool ok_1 = false;
for (int i = ; i <= n; i++){
scanf("%d", &a[i]);
if (a[i] > k){
ok_1 = true;
}
sum += a[i];
}
if (ok_1){
printf("1\n");
continue;
}
if (sum < k){
printf("-1\n");
continue;
}
if (sum == k){
printf("%d\n", k);
continue;
}
//初始化
RMQ(n);
bool ok = false;
int l = ;
int r = n;
int ans = ;
int mid, t;
while (l <= r){
mid = (l + r) / ;
t = Find(mid);
if (t > k){
r = mid - ;
ans = mid;
ok = true;
}
else{
l = mid + ;
}
}
if (ok)
printf("%d\n", ans);
else
printf("-1\n");
}
//system("pause");
return ;
}

hdu 3484 Interviewe RMQ+二分的更多相关文章

  1. hdu 3486 Interviewe (RMQ+二分)

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

  2. HDU 5726 GCD (RMQ + 二分)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5726 给你n个数,q个询问,每个询问问你有多少对l r的gcd(a[l] , ... , a[r]) ...

  3. HDU - 5289 Assignment (RMQ+二分)(单调队列)

    题目链接: Assignment  题意: 给出一个数列,问其中存在多少连续子序列,使得子序列的最大值-最小值<k. 题解: RMQ先处理出每个区间的最大值和最小值(复杂度为:n×logn),相 ...

  4. HDU 3486 Interviewe RMQ

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

  5. hdu 5289 Assignment(2015多校第一场第2题)RMQ+二分(或者multiset模拟过程)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5289 题意:给你n个数和k,求有多少的区间使得区间内部任意两个数的差值小于k,输出符合要求的区间个数 ...

  6. HDU 5089 Assignment(rmq+二分 或 单调队列)

    Assignment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total ...

  7. *HDU3486 RMQ+二分

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

  8. 【bzoj2500】幸福的道路 树形dp+倍增RMQ+二分

    原文地址:http://www.cnblogs.com/GXZlegend/p/6825389.html 题目描述 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一 ...

  9. 玲珑杯 Round 19 B Buildings (RMQ + 二分)

    DESCRIPTION There are nn buildings lined up, and the height of the ii-th house is hihi. An inteval [ ...

随机推荐

  1. OTT

    http://baike.baidu.com/view/1315414.htm OTT 编辑   OTT 是“Over The Top”的缩写,是通信行业非常流行的一个词汇,这个词汇来源于篮球等体育运 ...

  2. 项目Alpha冲刺(团队9/10)

    项目Alpha冲刺(团队9/10) 团队名称: 云打印 作业要求: 项目Alpha冲刺(团队) 作业目标: 完成项目Alpha版本 团队队员 队员学号 队员姓名 个人博客地址 备注 221600412 ...

  3. 4408: [Fjoi 2016]神秘数

    4408: [Fjoi 2016]神秘数 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 452  Solved: 273 [Submit][Stat ...

  4. php网站前台utf-8格式有时会出现莫名其妙的空白行,重新保存下编码格式就可以了

    php网站前台utf-8格式有时会出现莫名其妙的空白行,重新保存下编码格式就可以了.

  5. IOS中调用系统拨打电话发送短信

    一.调用打电话界面 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat ...

  6. gitbash使用

    gitbash是什么 git bash是Windows下的命令行工具. 基于msys GNU环境,有git分布式版本控制工具. 主要用于git版本控制,上传下载项目代码. GNU环境,就是说如果你喜欢 ...

  7. sql server中like无法匹配下划线问题解决方案

    在sql server的like中下划线类似于通配符%,所以无法使用like '%_%'来匹配下划线,可以通过以下两种办法实现匹配下划线 1.使用转义字符escape like '%\_%' esca ...

  8. Silverlight实用窍门系列:2.Silverlight动态加载外部XML指定地址的WebService---(动态加载外部XML文件中指定的WebService地址)【附带实例源码】

    接上节所讲的,Silverlight可以加载外部的XML文件里面的内容,那么我们可不可以在外部XML里面配置一个WebService地址,并且以此加载这个地址来动态加载WebService呢?这样子就 ...

  9. 一步一步学Silverlight 2系列(16):数据与通信之JSON

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  10. Android 增,删,改,查 通讯录中的联系人

    一.权限 操作通讯录必须在AndroidManifest.xml中先添加2个权限, <uses-permission android:name="android.permission. ...