单调队列
Le_ballon_rouge
我是最讨厌、最粗鲁、最无知的人、彻头彻尾的讨厌鬼,任何人遇到我都是一种不幸。我轻视美德、无视美、不了解幸福。
展开
-
BZOJ1029
传送门:BZOJ1029还记得线段覆盖吗?我们将建筑物按Deadline排序,然后扫描排序后数组,如果当前建筑物可以被修建,则修建,否则,如果当前建筑物所用时间小于修过的建筑物最大时间,则放弃最大时间,改修它。 这个算法的正确性是显然的。 代码上的小细节见下:#include <cstdio> #include <cstdlib> #include <cmath> #include <cstri原创 2015-08-15 08:32:42 · 1130 阅读 · 2 评论 -
BZOJ1012
传送门:BZOJ1012比较naive的线段树或者说比较classical的单调队列。 线段树的做法就不讲了。 我们维护一个单调队列,满足升序排序,于是对任意i,如i>j且a[i]>a[j]则从队列中删除a[j]。 显然,队列操作的均摊复杂度为O(1)。 回答询问操作时我们二分即可。 代码上的小细节见下。#include <cstdio> #include <cstdlib> #inclu原创 2015-07-27 14:33:21 · 569 阅读 · 0 评论 -
BZOJ1047
传送门:BZOJ1047我们用f(i,j)表示第j列上区间[max(i-n+1,1),i]的最小值。 这一步的转移可以用单调队列来完成。 然后,我们用g(i,j)来表示以点(i,j)为右下角的边长为n的正方形中元素的最小值。 转移是:g(i,j)=min:f(i,j’),j’∈[max(j-n+1,1),j],于是它也可以用一个单调队列来优化。 注意细节。代码上的小细节见下。#include原创 2015-08-19 21:07:04 · 1228 阅读 · 0 评论 -
BZOJ1071
传送门:BZOJ1071枚举minH,minV,单调性优化+计不可行方案数即可。 代码上的细节较多。代码上的小细节见下。#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define N 5050 using namespace std;int A,B,C;struct KSD {原创 2015-08-20 16:50:32 · 989 阅读 · 0 评论