当前位置: 首页 > news >正文

后缀树模板

给定模式串 \(s\)\(q\) 次询问,求 \(t\)\(s\) 中出现次数。

其中每个字符以正整数编码,强制在线。

后缀树 板子。没写过考场摸出来了,记录下代码。\(O(n\log n)\)

#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/hash_policy.hpp>
#define fin(x) freopen(#x".in","r",stdin)
#define fout(x) freopen(#x".out","w",stdout)
#define fr(x) fin(x),fout(x);
#define Fr(x,y) fin(x),fout(y)
#define INPUT(_1,_2,FILE,...) FILE
#define IO(...) INPUT(__VA_ARGS__,Fr,fr)(__VA_ARGS__)
using namespace std;
using namespace __gnu_pbds;
#define mp make_pair
#define pii pair<int,int>
#define fi first
#define se second
#define pb push_back
#define cfast ios::sync_with_stdio(false);cin.tie(0),cout.tie(0)
#define ll long long
#define ull unsigned long long
#define intz(x,y) memset((x),(y),sizeof((x)))
char *p1,*p2,buf[100000];
#define nc() (p1==p2 && (p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++)
#define tup(x) array<int,(x)>
inline ll read(){ll x=0,f=1;char ch=nc();while(ch<48||ch>57){if(ch=='-')f=-1;ch=nc();}while(ch>=48&&ch<=57)x=x*10+ch-48,ch=nc();return x*f;
}
//void write(int x){cout<<x<<' ';}
//void write(pii x){cout<<"P("<<x.fi<<','<<x.se<<")\n";}
//void write(vector<auto>x){for(auto i:x)write(i);cout<<'\n';}
//void write(auto *a,int l,int r){for(int i=l;i<=r;i++)write(a[i]);cout<<'\n';}
inline ll lowbit(ll x){return x&-x;}
inline int pcount(ll x){for(int i=0,res=0;;res+=(x>>i)&1,i++)if(i>60)return res;
}//struct mt{
//	ll v;
//	mt(){v=0;}
//	mt(int x){this->v=x;}
//	inline mt operator+(mt x){return {(v+x.v)%mod};}
//	inline mt operator-(mt x){return {(v+mod-x.v)%mod};}
//	inline mt operator*(mt x){return {1ll*v*x.v%mod};}
//};
//inline void add(mt &x,mt y){x=x+y;}
//mt qp(mt x,int y){mt res(1);for(;y;x=x*x,y>>=1)if(y&1)res=res*x;return res;}
const int N=2e5+5,M=1e6+5,p=13131;
vector<int>e[N];__gnu_pbds::gp_hash_table<int,int>son[N];
int s[N],id[N],rk[N],h[N],pos[N],n,q,op,z[N],tp,tot,f[N],T[N],siz[N],d[N];
ull hsh[N],pw[N],hs[N];
inline ull get(int l,int r){return hsh[r]-hsh[l-1]*pw[r-l+1];}
inline ull gett(int l,int r){return hs[r]-hs[l-1]*pw[r-l+1];}
int cnt[M],x[N],y[N];
void get(){int ct=1e6;for(int i=1;i<=n;i++)++cnt[x[i]=s[i]];for(int i=2;i<=ct;i++)cnt[i]+=cnt[i-1];for(int i=1;i<=n;i++)id[cnt[x[i]]--]=i;for(int k=1;k<=n;k<<=1){int t=0;for(int i=n-k+1;i<=n;i++)y[++t]=i;for(int i=1;i<=n;i++)if(id[i]>k)y[++t]=id[i]-k;memset(cnt,0,sizeof(cnt));for(int i=1;i<=n;i++)++cnt[x[i]];for(int i=2;i<=ct;i++)cnt[i]+=cnt[i-1];for(int i=n;i>=1;i--)id[cnt[x[y[i]]]--]=y[i],y[i]=0;swap(x,y);x[id[1]]=t=1;for(int i=2;i<=n;i++){if(y[id[i]]==y[id[i-1]]&&y[id[i]+k]==y[id[i-1]+k])x[id[i]]=t;else x[id[i]]=++t;}if(t==n)return;ct=t;	} 
}
void build(){vector<int>p;z[tp=1]=tot=n+1;d[n+1]=1;for(int i=1;i<=n;i++){while(tp&&pos[z[tp]]>h[i])--tp;if(pos[z[tp]]^h[i])++tot,f[z[tp+1]]=tot,son[tot][s[id[i-1]+h[i]]]=z[tp+1],f[tot]=z[tp],son[z[tp]][s[id[i-1]+pos[z[tp]]]]=tot,d[tot]=i,z[++tp]=tot,pos[tot]=h[i],p.pb(tot),f[i]=tot,son[tot][s[id[i]+h[i]]]=i;else f[i]=z[tp],son[z[tp]][s[id[i]+h[i]]]=i;z[++tp]=i,pos[i]=n-id[i]+1,p.pb(i),d[i]=i;}for(int i:p)e[f[i]].pb(i);
}
void dfs(int u){siz[u]=(u<=n);for(int v:e[u])dfs(v),siz[u]+=siz[v];
}
inline void UesugiErii(){cin>>op>>n>>q,pw[0]=1;for(int i=1;i<=1e5;i++)pw[i]=pw[i-1]*p;for(int i=1;i<=n;i++)cin>>s[i],hsh[i]=hsh[i-1]*p+s[i];s[n+1]=-1;for(int i=n+1;i<=n<<1;i++)hsh[i]=-1;get();for(int i=1;i<=n;i++)rk[id[i]]=i;for(int i=1,t=0;i<=n;i++){if(t)--t;while(s[i+t]==s[id[rk[i]-1]+t])++t;h[rk[i]]=t;}build();dfs(n+1);int lst=0;while(q--){int len;cin>>len;for(int i=1;i<=len;i++){cin>>T[i];if(op)T[i]^=lst;hs[i]=hs[i-1]*p+T[i];}int u=n+1,_=len,t=1,ans=0;while(t<=len){int p=T[t];if(son[u].find(p)!=son[u].end())break;int L=pos[son[u][p]]-pos[u];int v=son[u][p];if(L<_&&get(id[d[v]]+pos[u],id[d[v]]+pos[v]-1)==gett(len-_+1,len-_+L))_-=L,u=v,t+=L;else{if(gett(len-_+1,len)==get(id[d[v]]+pos[u],id[d[v]]+pos[u]+_-1))ans=siz[v];break;}}cout<<(lst=ans)<<'\n';}
}
signed main(){cfast;int _=1;//cin>>_;for(;_;_--)UesugiErii();return 0;
}
http://www.jsqmd.com/news/50425/

相关文章:

  • 2025 年 11 月冷却塔厂家权威推荐榜:闭式冷却塔、方形冷却塔、工业冷却塔、全钢冷却塔、凉水塔、圆形冷却塔、玻璃钢冷却塔、防腐冷却塔、冷却水塔,高效散热与持久耐用的专业之选
  • 好用的库存管理系统盘点:橙子库存通——简洁实用、功能齐全,出入库管理更省心
  • 2025广州最大的留学中介机构
  • 库存管理系统哪家强?橙子库存通:专业稳定,安全可靠,110万企业的共同选择
  • 2025北京留学中介哪些机构好一点
  • k8s chain
  • C++ - 手动实现std::shared_ptr
  • 数据库风险监测系统:打造可审查、可调整、可溯源的教育数据库安全底座
  • 详细介绍:云计算概念及虚拟化
  • 使用Logstash实现PostgreSQL到Elasticsearch的数据摄取
  • 不丢帧、低延迟!图像采集卡的 5 步工作原理,看懂就是专家
  • 2025年封闭母线槽优质厂家权威推荐榜单:耐火母线槽/防水母线槽/空气型母线槽源头厂家精选
  • 2025年服装整烫专用设备定做厂家权威推荐榜单:服装小型整烫设备/服装隧道整烫设备/仙桃服装整烫设备源头厂家精选
  • 2025年数据分类分级产品选型排名与深度解析:可视化、自适应、一键部署成关键能力
  • 2025年国内一键部署、持久稳定的AI赋能的API数据接口安全厂商排名
  • Spring Data JPA 最佳实践【1/2】:实体设计指南
  • 轻量化、全链路、可溯源的医疗行业API安全最佳实践与案例
  • 数据库风险监测系统建设理论研究:从规范落地到智能化防御的全周期体系
  • 官网发布|智感未来-聚链共生-2026中国激光雷达大会暨展览会/火热招展中!!!
  • 2025年11月呼叫中心系统品牌推荐评测报告:从稳定性到AI能力的解决方案剖析
  • 2025广州最大的留学中介是哪家
  • Python入门:从零开始你的编程之旅
  • 2025北京申请留学机构哪家好
  • 2025年11月智能客服机器人服务商推荐热度榜:基于性能指标的结果承诺保障方案
  • 2025 年 11 月换热器厂家权威推荐榜:烟气气气换热器/烟气气水换热器,高效节能与耐用性深度解析及选购指南
  • QQueue队列
  • 2025年三集一体除湿热泵机组选购指南及厂家推荐,目前三集一体除湿热泵机组直销厂家联系电话精选实力品牌
  • 2025年11月取暖器品牌推荐评测报告:从稳定性到AI能力的解决方案剖析
  • 2025年11月数据标注平台推荐评测报告:从安全部署到智能辅助解决方案剖析
  • 2025年哈尔滨自闭症康复机构权威推荐榜单:孤独症/发育迟缓/发育落后源头机构精选