NOI2018 你的名字――SAM+线段树合并
题目链接在这里 洛谷 / LOJ 有一个串 \(S\) ,每次询问给你一个串 \(T\) ,两个数 \(L\) 和 \(R\) ,问你 \(T\) 有多少个本质不同的子串不是 \(S[L,R]\) 的子串 SOLUTION 如果你做过 生成魔咒 和 CF1037H ,就会做这道题了 有两个坑点: 1.线段树合并时必须每次都新建结点,因为两颗树都得保留 2.每次失配时必须先尝试减小已经匹配的长度,无法继续减少时再跳 \(suflink\) 我的大常数代码 #include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> #include <random> #include <string> #include <vector> #include <cmath> #include <ctime> #include <queue> #include <map> #include <set> #define IINF 0x3f3f3f3f3f3f3f3fLL #define u64 unsigned long long #define pii pair<int, int> #define mii map<int, int> #define u32 unsigned