//    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 单调队列的更多相关文章

  1. HDU 2430 Beans (单调队列+公式化简)

    题意:给你n袋豆子,每袋都有w[i]个豆子,接着任选连续任意个袋子的豆子合在一起放入容量为p的多个袋子里(每个袋子必须放满),问剩余的豆子数<=k时,能放满最多的袋子的个数 题解:个数与p都比较 ...

  2. BestCoder Round #89 B题---Fxx and game(单调队列)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5945     问题描述 输入描述 输出描述 输入样例 输出样例 题意:中文题,不再赘述: 思路:  B ...

  3. 单调队列 && 斜率优化dp 专题

    首先得讲一下单调队列,顾名思义,单调队列就是队列中的每个元素具有单调性,如果是单调递增队列,那么每个元素都是单调递增的,反正,亦然. 那么如何对单调队列进行操作呢? 是这样的:对于单调队列而言,队首和 ...

  4. FZU 1914 单调队列

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=1914 题意: 给出一个数列,如果它的前i(1<=i<=n)项和都是正的,那么这个数列是正的,问这个 ...

  5. BZOJ 1047 二维单调队列

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1047 题意:见中文题面 思路:该题是求二维的子矩阵的最大值与最小值的差值尽量小.所以可以考 ...

  6. 【BZOJ3314】 [Usaco2013 Nov]Crowded Cows 单调队列

    第一次写单调队列太垃圾... 左右各扫一遍即可. #include <iostream> #include <cstdio> #include <cstring> ...

  7. BZOJ1047: [HAOI2007]理想的正方形 [单调队列]

    1047: [HAOI2007]理想的正方形 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2857  Solved: 1560[Submit][St ...

  8. hdu 3401 单调队列优化DP

    Trade Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status ...

  9. 【转】单调队列优化DP

    转自 : http://www.cnblogs.com/ka200812/archive/2012/07/11/2585950.html 单调队列是一种严格单调的队列,可以单调递增,也可以单调递减.队 ...

随机推荐

  1. Spring Cloud (2) 服务消费者-基础

    LoadBalancerClient 使用Spring Cloud提供的负载均衡器客户端来实现服务的消费. 首先创建一个服务消费者工程,命名为com.david.consumer,并在pom.xml中 ...

  2. W3C标准冒泡、捕获机制

    (一) 捕获和冒泡如何相互影响 我们来做几个任务吧! 有一个前提,#parent为标签,#child为子标签,他们是嵌套关系支线任务1 //捕获模式 document.getElementById(' ...

  3. 【SQL】数值型函数

    1. CEIL 语法:CEIL(n) 作用:取大于等于数值n的最小整数 SQL> select ceil(9.1),ceil(9.9),ceil(9) from dual; CEIL(9.1)  ...

  4. chown chmod chgrp chattr chroot usermod 命令简单分析

    chown用于修改文件或目录的所属主与所属组,格式为:“chown [参数] 所属主:所属组 文件或目录名称”.[root@localtion ~]# chown root:bin test[root ...

  5. ICCV2015上的GazeTracker论文总结

    SLAM问题先慢慢编译一段时间,赶紧拾起来GazeTrack的事情...... ICCV2015的大部分paper已经可以下载,文章列表在这个位置. http://www.cvpapers.com/i ...

  6. css3基础篇三

    CSS3 文本阴影 在 CSS3 中,text-shadow 可向文本应用阴影. 您能够规定水平阴影.垂直阴影.模糊距离,以及阴影的颜色: 实例 向标题添加阴影: h1 { text-shadow: ...

  7. 如何将一个已有的项目托管到github或是码云上?git的配置

    场景一:已有的一个项目,要把它托管到Git上去,步骤和方法如下: 方法一: ①在工程的路径下 : git init 建一个裸仓库. ②远程仓库地址 :将本地的仓库和远程仓库关联 git remote ...

  8. The remote certificate is invalid according to the validation procedure 远程证书验证无效

    The remote certificate is invalid according to the validation procedure   根据验证过程中远程证书无效 I'm calling ...

  9. luogu P1714 切蛋糕 单调队列

    单调队列傻题. 考虑以 $i$ 结尾的答案 : $max(sumv_{i}-sumv_{j}),j \in [i-m,i-1]$ ($sumv_{i}$ 为前缀和) 稍微搞一搞,发现 $sumv_{i ...

  10. py西游公关之模块

    Py西游攻关之模块   模块&包(* * * * *) 模块(modue)的概念: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可 ...