题目大意:有一些珠子串成的项链,珠子有不同的颜色。多次询问一段区间内有多少不同的颜色。
思路:这个题让我学会了一种巧妙的离线做法。将问题按左端点排序。处理出来每个颜色第一个出现的位置,和每个颜色下一个出现的位置。然后1到cnt循环,如果这里有一个问题的左端点是当前节点,就处理他的答案,方法是前缀合,可以用树状数组。然后把这个颜色的下一个出现的位置+1。
这样做就避免了一种颜色在询问中被...
分类:
其他好文 时间:
2014-10-01 15:21:51
阅读次数:
205
题目链接:hdu 3308 LCIS
题目大意:给定一个序列,两种操作:
Q l r:查询区间l,r中的最长连续递增序列长度U p x:将位置p上的数改成x
解题思路:线段树上的区间合并,这是在左右子树合并的时候要判断一下是否满足递增即可。
#include
#include
#include
using namespace std;
const int maxn =...
分类:
其他好文 时间:
2014-10-01 14:47:51
阅读次数:
243
题目大意:维护一种01数据结构,它可以:
1.把一段区间变成0。
2.把一段区间变成1。
3.把一段区间取反。
4.查询一段区间内1的个数。
5.查询一段区间内连续的1的个数。
思路:一眼看去Splay和线段树都可以,看起来好像Splay维护起来好弄一点,就没怎么想写了Splay。写完之后才发现Splay维护的时候边界值根本没法弄(可能是我写的麻烦),就又重写线段树。啊啊啊啊现...
分类:
其他好文 时间:
2014-10-01 13:33:11
阅读次数:
346
题意:一棵树,俩种操作:1 有路径上的所有点加vi,2所有边加vi。
先离线求出所有询问的lca,再遍历询问一次,点+vi,lca-2*vi ,最后dfs从叶子扫上来一次,最后再祖先点补上即可。用了输入挂。复杂度(n+m).
#pragma comment(linker,"/STACK:10240000000000,10240000000000")
#include
#include
#in...
分类:
其他好文 时间:
2014-10-01 13:08:21
阅读次数:
160
HDU Aragorn's Story
题目链接
树抛入门裸题,这题是区间修改单点查询,于是套树状数组就OK了
代码:
#include
#include
#include
#include
using namespace std;
const int N = 50005;
inline int lowbit(int x) {return x&(-x);}
i...
分类:
其他好文 时间:
2014-09-30 14:37:49
阅读次数:
199
这题说的给了100000个数有100000次操作 询问 L和R 区间内 在D位上为P的个数,用树状数组存 要开[10][10][100000]的int 开不了但是能开 这么大的unsign short 这样我们将这个树状数组一分为二 50000 个位前面 50000 为后面 我们知道unshort ...
分类:
其他好文 时间:
2014-09-29 23:45:51
阅读次数:
322
1 //Accepted 28904 KB 781 ms 2 //划分树 3 //所求x即为l,r区间排序后的中位数t 4 //然后求出小于t的数的和sum1,这个可以用划分树做 5 //求出整个区间的和sum,可以用O(1)的数组做 6 //ans=(k-1)*t-sum...
分类:
其他好文 时间:
2014-09-29 23:44:21
阅读次数:
305
1 //Accepted 14796 KB 453 ms 2 //划分树 3 //把查询的次数m打成n,也是醉了一晚上!!! 4 //二分l--r区间第k大的数和h比较 5 #include 6 #include 7 #include 8 #include 9...
分类:
其他好文 时间:
2014-09-29 23:35:51
阅读次数:
229
引用网上的一些介绍:查找整序列的第k大值往往采用快速查找法。然而此方法会破坏原序列,并且需要O(n)的时间复杂度。抑或使用二叉平衡树进行维护,此方法每次查找时间复杂度仅为O(logn)。然而此方法丢失了原序列的顺序信息,无法查找出某区间内的第k大值。划分树的基本思想就是对于某个区间,把它划分成两个子...
分类:
其他好文 时间:
2014-09-29 22:54:41
阅读次数:
226