摘要: 思路:既然要求的是不同的元素的和,那么我们可以想办法让每个值在区间中只出现一次,于是想到了离线的算法:将查询按照右端点排序,位置在右端点之前的元素都插入到树状数组中,对于已经出现过的值,我们要先删除(在原位置)再插入(在cur的位置),因为很显然对于同一个元素,只有在最靠右的位置出现一次才能返回正确... 阅读全文
posted @ 2015-07-29 20:22 hxy_has_been_used 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 由于星星是按照y从小到大,y相同x从小到大排好序的(其实没排好也没关系,我们有sort和cmp大法),所以只要不断地求某个位置的前缀和就好了,可以用树状数组或Treap来维护。树状数组: 1 #include 2 #include 3 #include 4 using namespace st... 阅读全文
posted @ 2015-07-29 19:17 hxy_has_been_used 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 因为最后要求的是区间和,所以其实color不用存下来,这里将color当做lazy标记:color为-1表示已经pushdown或为初始状态;color为1、2、3时表示区间为相应颜色。 1 #include 2 #include 3 #include 4 using namespace st... 阅读全文
posted @ 2015-07-29 14:48 hxy_has_been_used 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 区间染色问题,用线段树可以解决。颜色总类不多,故考虑用二进制数的每一位表示一种颜色,然后父节点的颜色就是孩子节点颜色“或”起来,加上lazy标记,轻松AC。poj 2777: 1 #include 2 #include 3 #include 4 using namespace std;... 阅读全文
posted @ 2015-07-29 13:40 hxy_has_been_used 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 很基本的容斥原理的题目,注意要先把0去掉。 1 #include 2 #include 3 #include 4 using namespace std; 5 6 typedef long long ll; 7 const int N = 10; 8 int s[N]; 9 bool vis... 阅读全文
posted @ 2015-07-29 10:09 hxy_has_been_used 阅读(175) 评论(0) 推荐(0) 编辑