hdu2430 Beans 单调队列
// hdu2430 Beans 单调队列
//
// 题目意思:
// 求一个sum%p<=k的max(sum/p)
//
// 结题报告:
// 技巧,先求出前缀和,并记录前i项对p取余的值记为x,并记下位置pos
// 依照先按x从小到大。假设x同样按pos从小到大排序。 这样,问题就转换为
// 求一个最小的pos使得pos到i的值最大。
//
// 单调队列里面保持的就是对于当前的i最小的pos值(满足pos到i区间的sum是满足条件的)
// 由于数组递增,这样求得的sum一定是最大的,这样就能够了
//
// 感悟:
//
// 这题应该也能够用线段树做,做的话也是以i为端点,查找最小的pos。而这个pos在
// sum[i]%p-k,sum[i]%p之间(由于k>=(sum[i]-sum[pos])%p>0),维护最小值。 待我练练线段树
// 再加上自己更深的理解而单调队列也能实现以i为结尾的区间之前的最小的pos值,
// 感觉单调队列实在非常巧妙 #include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream> typedef long long ll; using namespace std;
const int MAX_N = 1e6 + 100;
struct node {
int pos;
int val;
}a[MAX_N],deq[MAX_N];
ll f[MAX_N];
int t;
int n,p,k; bool cmp(node a,node b){
if(a.val!=b.val)
return a.val < b.val;
return a.pos < b.pos;
} void input(){
cin >> n >> p >> k;
f[0] = 0;
for (int i=1;i<=n;i++){
cin >> f[i];
f[i] = f[i-1] + f[i];
a[i].val = (int)(f[i]%(ll)p);
a[i].pos = i;
} sort(a+1,a+n+1,cmp); } void solve(){
int head = 0,tail = 0;
ll mx = -1;
for (int i=1;i<=n;i++){
while(head < tail && deq[tail-1].pos >= a[i].pos)
tail--; deq[tail++] = a[i]; while(head < tail && a[i].val - deq[head].val > k)
head++; if (f[a[i].pos]%(ll)p<=k) mx = max(mx,f[a[i].pos]/p); else if (head < tail && deq[head].pos < a[i].pos){
mx = max(mx,(f[a[i].pos] - f[deq[head].pos])/p);
}
}
cout << mx << endl;
} int main(){
ios::sync_with_stdio(false);
//freopen("1.txt","r",stdin);
int t;
cin >> t;
int kase = 1;
while(t--){
input();
cout << "Case " << kase++ << ": ";
solve();
}
}
hdu2430 Beans 单调队列的更多相关文章
- HDU 2430 Beans (单调队列+公式化简)
题意:给你n袋豆子,每袋都有w[i]个豆子,接着任选连续任意个袋子的豆子合在一起放入容量为p的多个袋子里(每个袋子必须放满),问剩余的豆子数<=k时,能放满最多的袋子的个数 题解:个数与p都比较 ...
- BestCoder Round #89 B题---Fxx and game(单调队列)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5945 问题描述 输入描述 输出描述 输入样例 输出样例 题意:中文题,不再赘述: 思路: B ...
- 单调队列 && 斜率优化dp 专题
首先得讲一下单调队列,顾名思义,单调队列就是队列中的每个元素具有单调性,如果是单调递增队列,那么每个元素都是单调递增的,反正,亦然. 那么如何对单调队列进行操作呢? 是这样的:对于单调队列而言,队首和 ...
- FZU 1914 单调队列
题目链接:http://acm.fzu.edu.cn/problem.php?pid=1914 题意: 给出一个数列,如果它的前i(1<=i<=n)项和都是正的,那么这个数列是正的,问这个 ...
- BZOJ 1047 二维单调队列
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1047 题意:见中文题面 思路:该题是求二维的子矩阵的最大值与最小值的差值尽量小.所以可以考 ...
- 【BZOJ3314】 [Usaco2013 Nov]Crowded Cows 单调队列
第一次写单调队列太垃圾... 左右各扫一遍即可. #include <iostream> #include <cstdio> #include <cstring> ...
- BZOJ1047: [HAOI2007]理想的正方形 [单调队列]
1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2857 Solved: 1560[Submit][St ...
- hdu 3401 单调队列优化DP
Trade Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- 【转】单调队列优化DP
转自 : http://www.cnblogs.com/ka200812/archive/2012/07/11/2585950.html 单调队列是一种严格单调的队列,可以单调递增,也可以单调递减.队 ...
随机推荐
- Spring Cloud (2) 服务消费者-基础
LoadBalancerClient 使用Spring Cloud提供的负载均衡器客户端来实现服务的消费. 首先创建一个服务消费者工程,命名为com.david.consumer,并在pom.xml中 ...
- W3C标准冒泡、捕获机制
(一) 捕获和冒泡如何相互影响 我们来做几个任务吧! 有一个前提,#parent为标签,#child为子标签,他们是嵌套关系支线任务1 //捕获模式 document.getElementById(' ...
- 【SQL】数值型函数
1. CEIL 语法:CEIL(n) 作用:取大于等于数值n的最小整数 SQL> select ceil(9.1),ceil(9.9),ceil(9) from dual; CEIL(9.1) ...
- chown chmod chgrp chattr chroot usermod 命令简单分析
chown用于修改文件或目录的所属主与所属组,格式为:“chown [参数] 所属主:所属组 文件或目录名称”.[root@localtion ~]# chown root:bin test[root ...
- ICCV2015上的GazeTracker论文总结
SLAM问题先慢慢编译一段时间,赶紧拾起来GazeTrack的事情...... ICCV2015的大部分paper已经可以下载,文章列表在这个位置. http://www.cvpapers.com/i ...
- css3基础篇三
CSS3 文本阴影 在 CSS3 中,text-shadow 可向文本应用阴影. 您能够规定水平阴影.垂直阴影.模糊距离,以及阴影的颜色: 实例 向标题添加阴影: h1 { text-shadow: ...
- 如何将一个已有的项目托管到github或是码云上?git的配置
场景一:已有的一个项目,要把它托管到Git上去,步骤和方法如下: 方法一: ①在工程的路径下 : git init 建一个裸仓库. ②远程仓库地址 :将本地的仓库和远程仓库关联 git remote ...
- The remote certificate is invalid according to the validation procedure 远程证书验证无效
The remote certificate is invalid according to the validation procedure 根据验证过程中远程证书无效 I'm calling ...
- luogu P1714 切蛋糕 单调队列
单调队列傻题. 考虑以 $i$ 结尾的答案 : $max(sumv_{i}-sumv_{j}),j \in [i-m,i-1]$ ($sumv_{i}$ 为前缀和) 稍微搞一搞,发现 $sumv_{i ...
- py西游公关之模块
Py西游攻关之模块 模块&包(* * * * *) 模块(modue)的概念: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可 ...