/*
题意:求k个区间的最大值之和。区间长度是n/k;
思路:rmq+二分
*/
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<iostream>
#include<stdlib.h>
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<vector>
#include<bitset>
#pragma comment(linker, "/STACK:1024000000,1024000000")
template <class T>
bool scanff(T &ret){
char c; int sgn; T bit=0.1;
if(c=getchar(),c==EOF) return 0;
while(c!='-'&&c!='.'&&(c<'0'||c>'9')) c=getchar();
sgn=(c=='-')?-1:1;
ret=(c=='-')?0:(c-'0');
while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0');
if(c==' '||c=='\n'){ ret*=sgn; return 1; }
while(c=getchar(),c>='0'&&c<='9') ret+=(c-'0')*bit,bit/=10;
ret*=sgn;
return 1;
}
#define inf 1073741824
#define llinf 4611686018285162540LL
#define eps 1e-8
#define mod 9223372034707292160LL
#define pi acos(-1.0)
#define lth (th<<1)
#define rth (th<<1|1)
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define drep(i,a,b) for(int i=a;i>=b;i--)
#define mset(x,val) memset(x,val,sizeof(x))
#define mcpy(x,y) memcpy(x,y,sizeof(y))
#define findx(x) lower_bound(b+1,b+1+bn,x)-b
#define mpii(a,b) make_pair(a,b);
#define NN 101010
#define MM 202020
using namespace std;
typedef long long ll;
typedef long double lb;
typedef pair<int,int> pii;
int n,m,ma[MM][26],a[MM];
void init(){
int len=(int)(log(double(n))/log(2.0));
rep(i,1,n) ma[i][0]=a[i];
rep(j,1,len)
rep(i,1,n) if(i+(1<<(j-1))<=n) ma[i][j]=max(ma[i][j-1],ma[i+(1<<(j-1))][j-1]);
}
int rmq(int l,int r){
int len=(int)(log(double(r-l+1))/log(2.0));
return max(ma[l][len],ma[r-(1<<len)+1][len]);
}
int getsum(int k){
int len=n/k,ans=0;
rep(i,1,k) ans+=rmq(len*(i-1)+1,len*i);
return ans;
}
int main(){
while(scanf("%d%d",&n,&m)!=EOF){
if(n<0&&m<0) break;
int sum=0,mm=0;
rep(i,1,n){
scanf("%d",&a[i]);
sum+=a[i];
mm=max(a[i],mm);
}
if(mm>=m) {printf("1\n");continue;}
if(sum<m) {printf("-1\n");continue;}
init();
int l,r,ans;
l=1,r=n;
while(r>=l){
int mid=(l+r)>>1;
int pd=getsum(mid);
if(pd>m){
ans=mid;
r=mid-1;
}
else l=mid+1;
}
printf("%d\n",ans);
}
return 0;
}
HDU 3486 Interviewe
最新推荐文章于 2019-05-09 21:35:51 发布