HDU 3486 Interviewe
来源:互联网 发布:软件开发工作 翻译 编辑:程序博客网 时间:2024/06/15 06:16
/*题意:求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 202020using 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;}
0 0
- Interviewe hdu 3486
- hdu 3486 Interviewe 【RMQ】
- hdu 3486 Interviewe
- hdu 3486 Interviewe
- hdu 3486 Interviewe (RMQ)
- HDU 3486 Interviewe
- HDU-3486 Interviewe
- HDU-3486-Interviewe
- hdu 3486 Interviewe 二分+RMQ
- hdu 3486 Interviewe(二分+rmq)
- hdu 3486 Interviewe(RMQ)
- HDU 3486 Interviewe(RMQ)
- HDU 3486 Interviewe(RMQ问题)
- HDU 3486 Interviewe(RMQ+二分)
- hdu 3486 Interviewe (二分+RMQ)
- hdu 3486 Interviewe (二分+RMQ)
- Hdu 3486 Interviewe(二分+RMQ)
- hdu 3489(RMQ)Interviewe
- angularJS实例之购物车
- 研究ArcGis心得
- ORACLE中sequence用法
- 5.c/c++程序员面试宝典-c与c++的联系、编程规范
- 从零单排linux&hi3516(2)vim-ide
- HDU 3486 Interviewe
- 【Android布局】在程序中设置android:gravity 和 android:layout_Gravity属性
- c++面试题 整理
- How to install Hadoop 2.7 on RedHat 6.5
- Qt学习点滴积累
- 向datagrid的cell中添加多个dijit
- Android从服务器获取图片的实例方法
- 桌面图标文件不能拖动的解决方法
- Makefile编译多个可执行文件