摘要: 既然这道题目要我们维护出现在%5=3位置上面的值,那么我现在想想是不是这个线段区间上面只可能有5种状态的线段树出现。那么我就只用维护这五种状态,最后只用看3状态上面的数字之和为多少就ok了。。当然还是要来一个离线处理,因为你现在必须知道对于这一整组数据而言要建立多大的一颗线段树。View Code 1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 #include<string.h> 5 #define LL __int64 6 using std::unique; 7 阅读全文
posted @ 2012-11-24 19:21 诺小J 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 其实这道题真的告诉了我一个道理,那就是仔细看题,题目中明确说出了1就是所有子树的根结点。我们可以想一想,现在每个结点代表着一段区间的询问,所以我们必须利用深搜的时间戳来找出所有结点所代表的区间。前向星见图自然不可少。更新区间的话,我们必须用离线处理,[i,j]这个区间代表着第i个数在这个区内出现k次的数的个数。View Code 1 #include<algorithm> 2 #include<iostream> 3 #include<string.h> 4 #include<cstdio> 5 #include<vector> 6 阅读全文
posted @ 2012-11-24 11:29 诺小J 阅读(348) 评论(0) 推荐(0) 编辑
摘要: 一开始接触到这道题目的时候就有了思路,应该是之前做线段树出来的结果吧,不过这个更新真的想了很久。把其中的红、绿、蓝以1、2、4来代替,那么通过位运算就能将其他的颜色状态都演化出来。代码部分就更新部分最精华,这还是参考的网上的某位大哥的神作而得来的。。View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<string.h> 5 #include<stdlib.h> 6 #define LL __int64 7 using st 阅读全文
posted @ 2012-11-24 11:25 诺小J 阅读(231) 评论(0) 推荐(0) 编辑