hdu 3486 Interviewe 【RMQ】
来源:互联网 发布:oppo结构工程师pe 知乎 编辑:程序博客网 时间:2024/05/22 06:41
不满足单调性,所以二分解法不正确(虽然可以过OJ),
#include<cstdio>#include<iostream>using namespace std;const int maxn=200000+10;int dp[maxn][20],mylog[maxn],n;long long k;void read(int &d){ char ch; while(ch=getchar(),ch<48||ch>57); d=ch-48; while(ch=getchar(),ch<58&&ch>47) d=d*10+ch-48;}void init(int n){ int i,j,&lev=mylog[n]; for(j=1;j<=lev+1;j++) for(i=0;i+(1<<j)<=n;i++) dp[i][j]=max(dp[i][j-1],dp[i+(1<<j-1)][j-1]);}int query(int l,int r){ int &lev=mylog[r-l+1]; return max(dp[l-1][lev],dp[r-(1<<lev)][lev]);}int main(){ for(int i=0;i<18;i++) for(int j=1<<i;j<(1<<i+1)&&j<maxn;j++) mylog[j]=i; while(cin>>n>>k) { if(n<0&&k<0) return 0; for(int i=0;i<n;i++) read(dp[i][0]); init(n); long long ans=0; int i,j,l,r,tmp,eve, m, per = -1, ps; for(i = 1; i <= n; i++) { eve = n / i; m = eve * i; //per==eve?j=ps+1:ans=0,j=1; if(per == eve) j=ps+1; else ans=0,j=1; for(; j + eve - 1 <= m; j += eve) { l = j; r = j + eve - 1; tmp = query(l, r); ans += tmp; if(ans > k) break; } if(ans > k) break; per = eve; ps = m; } cout<<(ans>k?i:-1)<<endl; }}
- 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 3486 Interviewe (二分+RMQ)
- Hdu 3486 Interviewe(二分+RMQ)
- hdu 3489(RMQ)Interviewe
- HDOJ 3486 Interviewe RMQ
- HDU 3486 Interviewe (RMQ+暴力,3级)
- Interviewe hdu 3486
- hdu 3486 Interviewe
- hdu 3486 Interviewe
- HDU 3486 Interviewe
- 点亮一个LED
- 我的职场战争--一年来的开发组内战实录
- 我的职场战争--一年来的开发组内战实录
- 应聘华为的朋友小心了,应聘华为的悲惨遭遇!
- POJ 2350 Above Average(我的水题之路——%lf输出报错)
- hdu 3486 Interviewe 【RMQ】
- IT必须掌握的常用命令
- 花生壳动态域名-用花生壳配置自己的电脑作为服务器
- Android ListView样式的设置
- 人脸头部图像的特征提取方法
- 技术这东西,不可不看,不可全看.
- Android Loader详解二:使用加载器
- 成为java高手的25个目标
- 产品与市场,究竟哪一个重要