题目大意:给定n个数的序列,让我们找前面k个区间的最大值之和,每个区间长度为n/k,如果有剩余的区间长度不足n/k则无视之。现在让我们找最小的k使得和严格大于m。

题解:二分k,然后求RMQ检验。

ST算法:

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn=200010;
int d[maxn][30];
int a[maxn];
void init_rmq(int n){
for(int i=0;i<n;i++)d[i][0]=a[i];
for(int j=1;(1<<j)<=n;j++){
for(int i=0;i+(1<<j)-1<n;i++)
d[i][j]=max(d[i][j-1],d[i+(1<<(j-1))][j-1]);
}
}
int query_rmq(int L,int R){
int k=0;
while(1<<(k+1)<=R-L+1)k++;
return max(d[L][k],d[R-(1<<k)+1][k]);
}
bool check(int len,int m,int t){
int sum=0;
for(int i=1;i<=t;i++){
sum+=query_rmq((i-1)*len,i*len-1);
if(sum>m)return true;
}
return false;
}
int main(){
int n,m;
while(~scanf("%d %d\n",&n,&m)){
if(n<0||m<0)break;
int sum=0;
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
sum+=a[i];
}
if(sum<=m){printf("-1\n");continue;}
init_rmq(n);
int l=1,r=n,ans;
while(l<=r){
int mid=(l+r)>>1;
if(check(n/mid,m,mid)){
ans=mid;
r=mid-1;
}else l=mid+1;
}
printf("%d\n",ans);
}
return 0;
}

暴力:

#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=200010;
int a[maxn];
char c;
bool check(int len,int m,int t){
int x=-1,sum=0;
for(int i=0;i<t;i++){
for(int j=i*len+1;j<=(i+1)*len;j++)if(a[j]>x)x=a[j];
sum+=x;if(sum>m)return true;x=-1;
}
return false;
}
void scan(int &x){
while(c=getchar(),c<'0'||c>'9');x=c-'0';
while(c=getchar(),c>='0'&&c<='9')x=x*10+c-'0';
}
int main(){
int n,m;
while(~scanf("%d%d\n",&n,&m)){
if(n<0||m<0)break;
int sum=0;
for(int i=1;i<=n;i++){
scan(a[i]);
sum+=a[i];
}
if(sum<=m){printf("-1\n");continue;}
int l=1,r=n,ans;
while(l<=r){
int mid=(l+r)>>1;
if(check(n/mid,m,mid)){
ans=mid;
r=mid-1;
}else l=mid+1;
}
printf("%d\n",ans);
}
return 0;
}
    令人惊讶的是暴力竟比ST快,因为复杂度少了一个log,所以做题时一定要多考虑,不要盲目码代码

HDU 3486 Interviewe的更多相关文章

  1. hdu 3486 Interviewe (RMQ+二分)

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

  2. HDU 3486 Interviewe RMQ

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

  3. Interviewe HDU - 3486( 暴力rmq)

    面试n个人,可以分任意组数,每组选一个,得分总和严格大于k,问最少分几组 就是暴力嘛...想到就去写吧.. #include <iostream> #include <cstdio& ...

  4. Interviewe HDU - 3486 (ST表+枚举 )(非二分,看下这个数据、)

    YaoYao has a company and he wants to employ m people recently. Since his company is so famous, there ...

  5. HDOJ 3486 Interviewe

    人生中第一次写RMQ....一看就知道 RMQ+2分但是题目文不对题....不知道到底在问什么东西....各种WA,TLE,,RE...后就过了果然无论错成什么样都可以过的,就是 上层的样例 啊  I ...

  6. hdu 3484 Interviewe RMQ+二分

    #include <cstdio> #include <iostream> #include <algorithm> using namespace std; + ...

  7. 3486 ( Interviewe )RMQ

    Problem Description YaoYao has a company and he wants to employ m people recently. Since his company ...

  8. hdu 3486

    题意:n个人,每个人的价格a[  i  ] ,求最少分几组,每组取一个人,多出来的人就不考虑,使得这取出人的价格大于k.(每组人数一样) 分析:每组取一个人,那这个人肯定是这组最大的,枚举多少组就可以 ...

  9. HDU题解索引

    HDU 1000 A + B Problem  I/O HDU 1001 Sum Problem  数学 HDU 1002 A + B Problem II  高精度加法 HDU 1003 Maxsu ...

随机推荐

  1. 【原创】重绘winform的GroupBox

    功能:重绘winform的GroupBox,以便调整边框颜色和边框宽度 using System; using System.Collections.Generic; using System.Com ...

  2. 2014.9.23window对象

    一.window对象 Wondow.navigate(url); 跳转页面(与超链接的区别:可以加逻辑条件) Var a = Math.random(); 0-1之间随机数 Var a = parse ...

  3. win7(32 bit) + IE8 环境,IE8无法弹窗(错误提示:“此网页上的错误可能会使它无法正确运行”),有关的系统注册信息损坏——解决方法

    错误截图如下:   IE有关的系统注册信息损坏,导致IE无法正常弹窗.   解决办法:重新注册与IE有关的DLL文件,具体如下: 1.以管理员身份运行附件脚本(新建txt文件,将下面代码复制到txt文 ...

  4. headfirst之装饰模式

    class A A.hello class B extends A B.hello = A.hello+B 装饰模式:子类对父类想要包装的方法进行重写,使之成为加强版

  5. Linux常用指令(待补充)

    1.cd进入目录 2../shuntdown.sh  停止tomcat 3.ps -ef |grep +进程名  查看进程状态 4.kill +进程名   强杀kill -9 +进程 5./start ...

  6. 开源libusb驱动的libwdi驱动安装API库和zadig.exe安装UI应用程序的编译和调试

    一.目的 二.编译环境 系统:Win7 ~ Win10 编译工具:Visual Studio 2008 或 Visual Studio 2010 或Visual Studio 2015 libwdi编 ...

  7. ssh生成密钥(供git使用)

    我们在使用git远程更新时候,需要设置好远程密钥,以使我们能够远程更新代码到代码库中.现在我们就来做一下这件事情(ssh模式下) ssh-keygen  -t rsa -c “hcu5555@hotm ...

  8. R与数据分析旧笔记(⑦)回归诊断

    回归诊断 回归诊断 1.样本是否符合正态分布假设? 2.是否存在离群值导致模型发生较大误差? 3.线性模型是否合理? 4.误差是否满足独立性.等方差.正态分布等假设条件? 5.是否存在多重共线性 正态 ...

  9. BaaS with Kinvey and Delphi 10.1 Berlin

    In this article I will show you how to connect yourdesktop and mobile applications to a mobile backe ...

  10. D3.js学习记录【转】【新】

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...