HDU 3486 Interviewe
题目大意:给定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的更多相关文章
- hdu 3486 Interviewe (RMQ+二分)
Interviewe Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- HDU 3486 Interviewe RMQ
题意: 将\(n\)个数分成\(m\)段相邻区间,每段区间的长度为\(\left \lfloor \frac{n}{m} \right \rfloor\),从每段区间选一个最大值,要让所有的最大值之和 ...
- Interviewe HDU - 3486( 暴力rmq)
面试n个人,可以分任意组数,每组选一个,得分总和严格大于k,问最少分几组 就是暴力嘛...想到就去写吧.. #include <iostream> #include <cstdio& ...
- Interviewe HDU - 3486 (ST表+枚举 )(非二分,看下这个数据、)
YaoYao has a company and he wants to employ m people recently. Since his company is so famous, there ...
- HDOJ 3486 Interviewe
人生中第一次写RMQ....一看就知道 RMQ+2分但是题目文不对题....不知道到底在问什么东西....各种WA,TLE,,RE...后就过了果然无论错成什么样都可以过的,就是 上层的样例 啊 I ...
- hdu 3484 Interviewe RMQ+二分
#include <cstdio> #include <iostream> #include <algorithm> using namespace std; + ...
- 3486 ( Interviewe )RMQ
Problem Description YaoYao has a company and he wants to employ m people recently. Since his company ...
- hdu 3486
题意:n个人,每个人的价格a[ i ] ,求最少分几组,每组取一个人,多出来的人就不考虑,使得这取出人的价格大于k.(每组人数一样) 分析:每组取一个人,那这个人肯定是这组最大的,枚举多少组就可以 ...
- HDU题解索引
HDU 1000 A + B Problem I/O HDU 1001 Sum Problem 数学 HDU 1002 A + B Problem II 高精度加法 HDU 1003 Maxsu ...
随机推荐
- Asp.Net MVC 控制器
原文链接:http://www.asp.net/learn/mvc/ 这篇教程探索了ASP.NET MVC控制器(controller).控制器动作(controller action)和动作结果(a ...
- 一个给力的html5 画多边形的例子
只需改变参数就能画出你想要的多边形,代码简单!不得不惊叹canvas的强大! 代码奉上 <!doctype html> <html> <head> <meta ...
- MFG 常用英文单字
Semiconductor 导体.绝缘体和半导体主要依据导电系数的大小,决定了电子的移动速度. 导体:金.银.铜.铁.人.水……导电系数大,传导容易 绝缘体:塑料.木头.皮革.纸……导电系数小.传导不 ...
- win7使用的一些误区以及困惑
总结了一些新人在使用win7时容易产生的误区和困惑,罗列出来说明一下,以便新人能尽快适应新的操作系统. 1.内存使用的问题:这是个大误区,很多人都用xp时代的眼光来审视win7,这是错误的,因为两者的 ...
- 深信服模式(先做减法,必须拜访客户三次、研究需求方向,把产品的问题控制住,快速反应,在未来十年,绝大部分业务都会搬到Internet上来,实现All on Internet)good
深圳市盛凯信息科技有限公司与深信服合作多年,可以说是看着深信服“飞速”长大的.盛凯的总经理邓渊在采访中笑言:“他们(深信服)发展得太快,而我们发展得太慢.” 深信服的产品线已从最初只有VPN一条,到目 ...
- Making your first driver - complete walkthrough(使用VisualDDK)
This article describes how to create, build and debug your first driver using Visual Studio and Visu ...
- .NET(C#):XML序列化时派生类的处理
原文 www.cnblogs.com/mgen/archive/2011/12/03/2275014.html 目录 1. 针对基类的XmlSerializer序列化派生类 2. 类内成员是派生类的序 ...
- BZOJ 1177 [Apio2009]Oil(递推)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1177 [题目大意] 给出一个矩阵,从中选出3个k*k且不相交的矩阵,使得其总和最大 [ ...
- Java知识点复习
总结下java的知识点 final 关键字-方法:不能被子类重写(override)-变量:不能被修改-类:不可以被继承,派生子类 finally 关键字与try/catch语句配合使用,即使有异常抛 ...
- 如何注册Uber司机,加入uber(全国版最新最详细注册流程)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...