Codeforces Round #216 (Div. 2) (又是线段树)

A:

先处理type1,然后type2

B:

看这个数据范围直接暴力,一个一个放进去就可以了,也可以尽可能平摊这个区间,剩余的k个分给前k个就行了,反正有解的话肯定是可行的。

C:

简单的遍历一棵树,如果某个节点下面没有坏边并且父边是坏边,则加入答案中。


D:

思路:可以知道所有的状态一定可以用 (i, j)表示,i前面的肯定全被杀死了,i 、j中间的也都被杀死了,j后面的都还活着,所以总的情况数是 n^2的。这样子的话我用t[i]表示剩余的人为 i ~ n至少需要几秒,对于每个i都判断下j (j > i)这个位置是否可行,表示状态 (i, j),有种特殊情况是最后全部都死了,这个的话判断什么时候只剩下两个人的时候他们的p都是大于0的就可行,用个flag标记下即可。


E:

给你一些线段,然后每次询问一些点,问这些点在多少条不同线段中。

思路:

对于每次询问的这些点,相邻两个点建一个线段,在最后一个点后加一个超远点和它建一个线段,所有的询问都这样处理,然后按右端点从小到大排序。对于原始线段也按右端点从小到大排序,每次拿出新建的线段,将原始线段中右端点值小于该线段右端点的线段插入到线段树中,然后询问新建的线段的左端点就可以了,这样子不会出现重复的,画个图想想就明白了。


你可能感兴趣的:(Codeforces Round #216 (Div. 2) (又是线段树))