单调队列
wuhulala
这个作者很懒,什么都没留下…
展开
-
HDU 3530 Subsequence
这个题意是给你n个数,然后寻找一个区间,区间的最大值与最小值的差要小于k并且大于m 思路: 用两个单调序列维护这个序列,显而易见用当前者两个单调序列的列首相减如果大于k的话那么,我们就要寻找列首在序列位置比较小的那个往后面加1。这个题目的难点在于题目意思是区间,我理解错了。以为是那种最长公共子序列那种。 #include #include #include using namespac原创 2015-07-17 17:00:04 · 709 阅读 · 0 评论 -
HYSBZ 1012 最大数maxnumber
思路:在单调队列不更新列首,因为查询区间大小不确定,所以不能保证下次是否还用到它 #include #include #include using namespace std; #define N 222222 #define ll long long int que[N]; ll m,d; ll a[N]; int cnt; char op[2]; int num; int main原创 2015-07-18 12:25:02 · 807 阅读 · 0 评论 -
FZU 1894(单调队列第一发)
题意:参加志愿者选拔的同学们排队接受面试官们的面试。参加面试的同学们按照先来先面试并且先结束的原则接受面试官们的考查。 输入含义1C NAME RP_VALUE名字为NAME的人品值为RP_VALUE的同学加入面试队伍。(名字长度不大于5,0 2G排在面试队伍最前面的同学面试结束离开考场。3Q主面试官John想知道当前正在接受面试的队伍中人品最高的值是多少。 思路:直接维护一个单调递减序原创 2015-07-17 16:54:09 · 890 阅读 · 0 评论 -
POJ 2823 Sliding Window
题意 给你n个数,然后求连续m个数的最小值和最大值 然后维护一个单调递增序列和一个单调递减序列 #include #include #include using namespace std; int last,head; int n,m,k; int a[1111111]; int que1[1111111]; int que2[1111111]; int ans1[1111111原创 2015-07-17 17:53:48 · 688 阅读 · 0 评论 -
poj 3017
题意:给你n个数,求划分的区间所有的最大值之和(划分条件就是这个区间之和小于m),使其最小 首先很容易想到dp,公式 dp【i】= min(dp【i】,dp【j】+max(a【j+1】+。。。a【i】)) 这是O(n^2)的复杂度 那么维护一个单调递减的序列的话,每次求的就是单调队列里面满足条件的那些元素,然后根据dp递推公式求解 Hint :用多组交的话会wA #include #原创 2015-07-18 11:32:38 · 1027 阅读 · 0 评论 -
hdu 5289 Assignment
给你n个数和一个数k,求存在多少个区间的最大值减最小值小于等于k用一个单调递增序列和一个单调递减序列维护一下数列,维护的时候,每一次把下标小的数从队列中删除。然后从左到右不断遍历。如果满足条件的话,就加上这个区间长度。#include <cstdio> #include <cstring> #include <algorithm> using namespace std;int last,head;原创 2015-07-21 19:21:17 · 876 阅读 · 0 评论