摘要: 这个是我做的线段树第三个题,比前两个区间求和稍微麻烦了一些!大致意思是:给一组棍子染色,不同的颜色有不同的值,执行一系列的区间染色后,问这组棍子的总值是多少。这题我用了两种方法,说是两种,其实就中间的某些细节不太一样!Nuumber one:每个线段树的结点,存储该结点所代表区间的染色状况num,如果该区间全为同样的颜色,则用一个正数(1,2,3)表示,如果含有多种颜色,则用-1表示,每次执行染色操作时,如果所要染的颜色与区间颜色一样,则停止,如果所要染区间跟当前结点区间一致,则直接将所要染颜色赋给当前结点的num,否则,如果当前结点区间不是混合色,则先将当前结点的颜色赋给左右子结点的num, 阅读全文
posted @ 2010-08-21 21:23 奋斗青春 阅读(1493) 评论(2) 推荐(0) 编辑
摘要: 这道题目其实是线段树,但是在一次比赛中由于数据比较弱,被我用一般的方法给水过了,学过线段树之后就又写了一遍!这道题就不翻译了,相信大家都能看懂!直接贴代码:# include<stdio.h># include<string.h>struct node { int left,right,mid; int num;//num表示该节点包含有多少个士兵}a[140000];int st[50005],sum;void make(int s,int t,int step){ a[step].left=s; a[step].right=t; a[step].mid=(s+t)/ 阅读全文
posted @ 2010-08-21 17:27 奋斗青春 阅读(487) 评论(0) 推荐(0) 编辑
摘要: 又是好多天没有写过了,这两天在研究线段树,到现在为止,总算是理解了一些! 这道题目应该是属于简单的离散题,由于a,b可能会非常的大,我没有想到怎么用线段树来做,就参考了一下别人的代码!大致的题意是这样的,有很多个小球从1开始标号,开始的时候颜色均为黑色,然后进行n次操作,每次输入两个数a,b(表示标号),然后再输入一个字符c,c可能为‘w’和‘b’其中的一个,‘w’表示把a,b之间的小球涂成白色,‘b’表示涂成黑色;最后输出longest white ball sequence的左边界和右边界!code:# include<stdio.h># include<stdlib.h 阅读全文
posted @ 2010-08-21 17:22 奋斗青春 阅读(1247) 评论(0) 推荐(0) 编辑