A. Blue

贪心 完了。

这道题学到了很多使用stl set的技巧。

 

 

 


 

B. Weed

线段树维护栈的操作。

一个重要的操作是递归结束时$O(logn)$复杂度的向下寻找分界点。

因为延伸出的一定是一条链,复杂度是$O(nlog^2n)$

 

 

 


 

C. Drink

十字链表,维护每个点四个方向的$next$。

因为旋转操作,无法明确四个方向,只能保证四个方向仍然为顺时针。

然而表头的方向没有改变过,

通过last所在的方向,确定要到达的方向。

每次修改只修改边界上的节点。

 

应当注意的是,

如果在移动的同时修改,可能导致方向的错乱,于是整个链表都死了。

我的解决方法是将所有的操作压进栈里。

在完成四个方向的移动后,统一进行栈内的操作。