2011年11月10日
摘要: HDU_3415 由于原序列是一个环,为了方便处理可以在序列尾补K-1个元素,从而变成了链。设前i项和为A[i],f[i]为右边界在第i项上时的最大和,则f[i]=max{A[i]-A[j]}(i-K<=j<i),于是我们可以用一个单调队列来维护至今遇到的最小的A[j]即可,且i-K<=j<i。 由于要求序列非空(或者说要求j<i),所以插入操作要放到最后去做,同时一开始要向队列里插入一个标号为0且值为0的元素。#include<stdio.h>#include<string.h>#define MAXD 200010#define INF 阅读全文
posted @ 2011-11-10 23:20 Staginner 阅读(491) 评论(0) 推荐(0) 编辑
摘要: POJ_2823 这个是在接触了单调队列优化后的第一个题目,其实个人感觉单调队列所作的优化就是维护了一个始终保存当前最优解的队列。 解的合法性是通过队列内各元素的标号的单调性保证的,每次要通过队首删除元素的操作来保证队列内的解是在当前区间内的。 队首元素的最优性则是由队列内元素值的单调性保证的,每次要通过将队尾不比当前待插入的元素更优的元素删除来保证了队首元素的最优性。#include<stdio.h>#include<string.h>#define MAXD 1000010int N, K, f[MAXD], d[MAXD], qf[MAXD], nf[MAXD], 阅读全文
posted @ 2011-11-10 16:28 Staginner 阅读(365) 评论(0) 推荐(1) 编辑