对于一个查询(l,r) 定义int tp=(int)log2(r-l);答案ans=max(dp[l][tp],dp[r-(1<<tp)+1][tp]);查询的区间重合也对结果没有影响,满足区间加法. 以Poj3264为例,AC代码: 1#include <iostream>2#include <cstdio>3#include <string.h>4#include <stdlib.h>5#include <math.h>6usingnamespaces...
const int N = 50010 << 2; int n, q; int val[N], Min[N], Max[N]; void PushUp(int u) { Max[u] = max(Max[u << 1], Max[u << 1 | 1]); Min[u] = min(Min[u << 1], Min[u << 1 | 1]); } void build(int u, int l, int r) { if (l == r) { Max[u...
POJ3264——Balanced Lineup(线段树) 子节点#include 本文出自:javascript:void(0) 题意:在1~200,000个数中。取一段区间。然后在区间中找出最大的数和最小的数字。求这两个数字的差。 分析:按区间取值,非常明显使用的线段树。 区间大小取200000 * 4 = 8 * 10 ^5; 进行查询的时候。注意直接推断l, r ...
1、朴素(即搜索),O(n)-O(qn) online。 2、线段树,O(n)-O(qlogn) online。 3、ST(实质是动态规划),O(nlogn)-O(q) online。 ST算法(Sparse Table),以求最大值为例,设d[i,j]表示[i,i+2^j-1]这个区间内的最大值,那么在询问到[a,b]区间的最大值时答案就是max(d[a,k], d[b-2^k+1...
poj3264_线段树 昨晚写了一个线段树的程序,各种bug,最后硬是AC了,这个题的大意是这样的: 给n个数字,然后在给出一些区间范围(s,e),求出在这个区间范围内的最大值和最小值,总结一下这个题,我一共有5个bug 1.建立线段树时,类似完全二叉树,一开始我开的数组是最大数字个数的2倍多一点,然后开始悲剧,每当...
(4)RMQ. (poj3264,poj3368)(5)并查集的高级应用. (poj1703,2492)(6)KMP算法. (poj1961,poj2406)...
(4)RMQ. (poj3264,poj3368) (5)并查集的高级应用. (poj1703,2492) (6)KMP算法. (poj1961,poj2406) 四.搜索 (1)最优化剪枝和可行性剪枝 (2)搜索的技巧和优化(poj3411,poj1724) (3)记忆化搜索(poj3373,poj1691) 五.动态规划 (1)较为复杂的动态规划(如动态规划解特别的施行商问题等) (poj1191,poj...
poj 3264 Balanced Lineup (线段树) 题意:http://poj.org/problem?id=3264 这里需要用到线段树的查询,不过特别的是,它需要查找两个值,最大值和最小值,在查找操作中稍加处理即可。 #include <iostream> #include<cstdio> #include<algorithm> #include<cstring>...
poj3422双连通分量poj2942,poj3694强连通分支及其缩点poj2186,poj3592,poj3114图的割边和割点poj3352最小割模型poj3308,poj3155(偏难)数据结构线段树第3周poj2528,poj2777,poj2828, poj2886,poj2750,poj3468,poj3667,poj3368平衡树(Treap、Splay)poj2482,poj2352,poj2892树状树组poj1195,poj3321RMQpoj3264,poj...