题目大意:给定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. English - refer to...和refer to...as

    refer to...和refer to...as...本来就是refer的两个固定搭配,这个只能讲讲后两者用法,剩下的就是单独的refer的用法了. 1. refer to sb/sth 指的是/提 ...

  2. English - allow to do 与 allow doing 的区别

    英语中并没有allow to do sth这种结构,只有allow doing sth 及allow sb to do sth这两个结构. 你这样记忆可能方便一些: 1. 在主动语态中,如果allow ...

  3. System类基础

    取时间差: public class SystemDemo01 {     public static void main(String[] args) {         long startTim ...

  4. 使用wfastcgi在IIS上部署Python Flask应用

    本文介绍了如何在Windows上部署Python Flask应用,相关环境如下: 操作系统:windows 7 Python:3.4 WFastCGI: 2.2 应用所用到的包版本如下: Flask= ...

  5. Windows系统下远程Linux系统

    Windows系统下远程Linux系统 工具:Xmanager 启动界面: 配置保存路径(win7): C:\Users\Administrator\AppData\Roaming\NetSarang ...

  6. jquery 小插件,完成“输入字段预期值的提示信息”,防html5 placeholder属性

    前言:在很多时候,我们需要文本框中显示默认值,获取焦点时,文字框中就会清空给的值,当失去焦点时,如果没有值,继续显示默认的文字,如果有输入值,就显示输入的值.现在项目中需要用到这个地方的功能比较多,于 ...

  7. MYSQL 的数据读取方式

    例子: create table T(X bit(8)); insert into T (X) values(b'11111111'); select X from T; 这个时候会发现这个X 是乱码 ...

  8. javascript 修改css样式

    abc.css CSS code .class1     {    width:10px;    background-color: red;    } HTML code <!DOCTYPE ...

  9. jquery 工作笔记,不断整理中..

    $('input:radio[name="ruleType"]:checked').val()  //获得radio选中的值 $("input[name='Q_lastU ...

  10. 7_Table Views

    7 // // ViewController.swift // Table Views // // Created by ZC on 16/1/9. // Copyright © 2016年 ZC. ...