2013年5月16日

摘要: 题意就是给你一颗树。初始时每个节点的值都为0,现在有两种操作,‘o’操作是将以节点i为根的子树的每个节点取反,即0变1,1变0.‘q’操作是求以节点i为根的子树中1的个数。方法主要是给每个节点分配一个区间,是这个区间的节点都是它的子节点。然后就是线段树的经典操作啦。 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 #define lson l,m,rt<<1 6 #define rson m+1,r,rt<< 阅读全文
posted @ 2013-05-16 20:57 kim888168 阅读(105) 评论(0) 推荐(0) 编辑
 
摘要: 这题很容易想到O(n^2)的做法,但这样肯定是要超时的,对于第i个box,可以用线段树在logn的时间内找出小于mes[i].h且能拿到最多金子的box。类型:线段树优化Dp。 1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4 #define lson l,m,rt<<1 5 #define rson m+1,r,rt<<1|1 6 #define maxn 100005 7 struct { 8 int max; 9 }setree[maxn<<2 阅读全文
posted @ 2013-05-16 11:03 kim888168 阅读(132) 评论(0) 推荐(0) 编辑