题意:给定一个长度为n的序列,依次求出(i,i+k-1) (i∈(0,n-1),i
本题有多种解法。首先,暴力的时间复杂度是O((n-k)*klogk),所以pass。
解法1:维护一个单调递增的队列(手写),队头即为最小值。同理求出最大值。
解法2:维护一个优先队列(priority_queue即可)
解法3:线段树
这里给出单调队列解法:
#include
#inc...
题目链接:http://poj.org/problem?id=2823#include#include#define M 1000001using namespace std;int n,k;int a[M];int q[M];int p[M];void get_min(){ int head...
分类:
其他好文 时间:
2015-03-02 16:16:47
阅读次数:
193
f(i)=min{f(j)+(D(j)using namespace std;#define N 1000001struct Point{int x,y;};bool operator =b.y;}int n,m,K,q[N];Point dp[N];int main(){ scanf("%d",&...
分类:
其他好文 时间:
2015-02-28 21:31:11
阅读次数:
166
#includeusing namespace std;#define N 1000001int n,K,a[N],head=1,tail=1,q[N],ans[N];int main(){ scanf("%d%d",&n,&K); for(int i=1;i=head) --tail; q[...
原本一道挺简单的DP题,思路有了,运用单调队列,但在写单调队列时写挫了。。。这道题只需要计算偶数位置的即可,这是显而易见的,我有注意过这情况,写的时候却没在意。。。--!加入队列的元素应该当前now之前的now-2*A的元素,我开始不是每计算一个now位置就加入now-2*A的元素,搞得不是O(L)...
分类:
其他好文 时间:
2015-02-26 19:59:04
阅读次数:
203
题目大意:给定一棵树,令a[i]为从第i个节点出发的最长链,求a[i]中最长的区间,满足区间内最大值与最小值之差不超过m
读错题害死人,脑残害死人
求a[i]显然是树形DP
考虑从一个点出发的链可以从子节点走,也可以从父节点走
因此我们DP两次,第一次求出从子节点走的最长链,第二次求出从父节点走的最长链,两次取max就是答案
但是直接DP会有问题,因为从父节点走的最长链可能是从自己的子树...
分类:
其他好文 时间:
2015-02-26 18:41:44
阅读次数:
128
描述
http://www.lydsy.com/JudgeOnline/problem.php?id=1012 分析
刚看以为是线段树或者是平衡树, 然后看了一种接近暴力的方法–单调队列. 感觉这个方法可以被卡住, 所以之后再发几种其他做法. 代码
https://code.csdn.net/snippets/607317...
分类:
其他好文 时间:
2015-02-24 18:43:22
阅读次数:
121
题目Description现在请求你维护一个数列,要求提供以下两种操作: 1、 查询操作。语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。限制:L不超过当前数列的长度。 2、 插入操作。语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾。限制:n是非负整数并且在...
分类:
其他好文 时间:
2015-02-21 18:52:45
阅读次数:
151
首先断环成链,变成两倍长度。然后二(fen)分(shu)答(gui)案(hua),查看答案为ans的长度在[L, R]之间的链存不存在。我们可以维护前缀和,用单调队列O(n)判断是否和大于0又学习了个黑科技。。。::x表示全局变量x。。。 1 /***************************...
分类:
其他好文 时间:
2015-02-15 23:04:38
阅读次数:
210