最近BZOJ炸了,而我的博客上又更新了一些基本知识,所以这里刷一些裸题,用以丰富知识性博客 POJ2823   滑动的窗口 这是一道经典的单调队题,我记得我刚学的时候就是用这道题作为单调队列的例题,算一道比较基本的题目 先贴题目 Description An array of size n ≤ 106 is given to you. There is a sliding window of size k which is moving from the very left of the arr…
1657: [Usaco2006 Mar]Mooo 奶牛的歌声 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 961  Solved: 679[Submit][Status][Discuss] Description Farmer John's N (1 <= N <= 50,000) cows are standing in a very straight row and mooing. Each cow has a unique height…
题目链接:https://www.luogu.org/problem/P1886#submit 题意:给定n个数,求大小为k的滑动窗口中最小值和最大值. 思路:单调队列模板题. AC代码: #include<cstdio> #include<algorithm> using namespace std; ; int n,k,head,tail; int a[maxn],q[maxn],p[maxn]; int main(){ scanf("%d%d",&…
Sliding Window POJ - 2823 单调队列模板题 题意 给出一个数列 并且给出一个数m 问每个连续的m中的最小\最大值是多少,并输出 思路 使用单调队列来写,拿最小值来举例 要求区间最小值 就是维护一个单调递增的序列 对于样例 8 3 1 3 -1 -3 5 3 6 7 我们先模拟一遍 1.队列为空 1 进队 队列:1 2.3>队尾元素 3 进队 队列: 1 3 3.-1小于队尾元素,一直从尾部出队知道找到比-1小的元素或者队列为空 队列:-1 当队列中元素大于m的时候从队头删…
今天学习了一下单调队列这种数据结构,思想不是很难 参考资料:http://www.cnblogs.com/Jason-Damon/archive/2012/04/19/2457889.html 然后自己写成了类的模板形式,并做了例题poj2823 代码如下: #include <iostream> #include <stdio.h> #include<string.h> #include<algorithm> #include<string>…
题目链接 传送门 题意 给你一个\(n\times n\)的矩形,要你求出一个面积最大的矩形使得这个矩形内的最大值减最小值小于等于\(M\). 思路 单调队列滚动窗口. 比赛的时候我的想法是先枚举长度然后再枚举左端点,最后用单调队列来做,然后\(T\)成傻逼,赛后看大佬们的代码发现我的做法比先枚举左端点再枚举右端点多很多状态(譬如在每次长度变化的时候我的写法会从最左边开始枚举,而先枚举左端点的做法则不会再反复考虑左边的情况). 我们先固定左端点,然后在枚举右端点的时候用两个数组记录\([L,R]…
放一手原题 题解: 第一次写(抄)斜率优化,心里还是有点小激动的.讲一下怎么实现的! 首先我们可以考虑一个朴素的dp:DP[i]表示前i个数字的最少花费,显然我们有一个转移方程 DP[i]=min{DP[j]+M+(sum[i]-sum[j])^2} 但是N^2肯定会超时,我们考虑优化他 假设有k<j<i,如果令j对i的贡献比k好 显然我们有这样的式子 DP[j]+M+(sum[i]-sum[j])^2 < DP[k]+M+(sum[i]-sum[j])^2 把平方打开之后移项 可以得到…
比较裸的单调队列 先求前缀和,枚举所有结束位置1~n+k即可 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 200005 using namespace std; int ans,a[maxn],sum[maxn]; int main(){ int T,N,K; scanf("%d",&T); while…
给定一个n个数的数列,从左至右输出每个长度为m的数列段内的最大数. 输入:第一行两个整数n和m( 1<= n <= 20 0000,m<=n).下来给出n个整数. 输出:一行一个整数,表示每连续m个数的最大值.样例输入: 8 3 1 3 -1 -3 5 3 6 7 样例输出: 3 3 5 5 6 7 维护一个单调队列,列内严格递减.若是首端元素已经脱离当前M个元素的区间,则去除.若是新元素比队尾元素严格小,直接入队,否则元素出队至合格后,新元素入队.比较模板了: #include <…
  Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 67218   Accepted: 19088 Case Time Limit: 5000MS Description An array of size n ≤ 106 is given to you. There is a sliding window of size k which is moving from the very lef…