传送门:HDU-6096
题解:字典树+线段树扫描线
首先用字典树对字符串按前缀的字典序排序,然后翻转字符串再按后缀的字典序排序,如果某些字符串要满足某个前缀,那么这些字符串一定是前缀排序中相邻,如果要满足后缀同理。
那么我们就可以得到2个区间[lx,rx],[ly,ry]分别代表满足前缀prf的字符串在[lx,rx]区间,满足后缀suf的字符串在[ly,ry]区间,如果某个字符串同时在这2个区间中则对答案的贡献就为1。
因此问题就可以变成平面矩形中包含多少个点,这就可以用线段树扫描线解决。将字符串在两种排序中的位置看成点(x,y),离线处理将矩形按横坐标从小到大排序,将点也按横坐标从小到大排序,最后扫一遍即可。
#include
#include
#include
#include
#include
#include