博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3448 : [Usaco2014 Feb]Auto-complete
阅读量:5076 次
发布时间:2019-06-12

本文共 1222 字,大约阅读时间需要 4 分钟。

RE了几十发,实在没办法了…只好向管理员要数据,然后发现数据规模与题目描述不符…

建立Trie并求出DFS序,同时根据DFS序确定字典序

然后每次询问相当于询问子树第k小,用主席树维护,注意压缩内存

时间复杂度$O(L+n\log w)$,L为所有串长度之和

 

#include
#include
const int N=100010,T=2100000,M=2000010;int n,q,i,k,v[T],st[T],en[T],tot,dfn,now,root[T],l[M],r[M],cnt,val[M],a[N],b[N],seq[T];int g[T],nxt[T],to[T],ed;char s[T],ch[T],w[T];inline void addedge(int x,int y,int z){to[++ed]=y,w[ed]=z;nxt[ed]=g[x];g[x]=ed;}inline int son(int x,int y){ for(int i=g[x];i;i=nxt[i])if(w[i]==y)return to[i]; return 0;}inline void ins(int p){ for(int x=0,i=0,j=std::strlen(s),w;i
>1; if(c<=mid)l[y]=add(l[x],a,mid,c),r[y]=r[x];else l[y]=l[x],r[y]=add(r[x],mid+1,b,c); return y;}inline int ask(int k){ int x=0,i=0,j=std::strlen(ch),w,y,c=1,d=n,mid; for(;i
>1,j=val[l[x]]-val[l[y]]; if(k<=j)d=mid,x=l[x],y=l[y];else k-=j,c=mid+1,x=r[x],y=r[y]; } return b[c];}int main(){ scanf("%d%d",&n,&q); for(i=1;i<=n;i++)scanf("%s",s),ins(i); for(dfs(0),i=1;i<=n;i++)b[a[i]]=i; for(i=1;i<=dfn;i++)root[i]=seq[i]?add(root[i-1],1,n,seq[i]):root[i-1]; while(q--)scanf("%d%s",&k,ch),printf("%d\n",ask(k)); return 0;}

  

 

转载于:https://www.cnblogs.com/clrs97/p/4403214.html

你可能感兴趣的文章
spring boot场景启动器(2.基本的启动器依赖)
查看>>
adb shell
查看>>
关于django模型语法里面的一些坑。系统报错:Unknown command: 'validate' Type 'manage.py help' for usage....
查看>>
图片保存到本机(链接)
查看>>
python读写文件write和flush
查看>>
extjs中model的HasMany和belongTo读取xml数据的用法
查看>>
linux C访问mysql 基础
查看>>
LeetCode N-Queens II
查看>>
JSP作业3-金字塔
查看>>
Generate BKS File( Bouncy Castle KeyStore)
查看>>
obdg反汇编破解crackme
查看>>
Python作业1 登录程序
查看>>
js弹出模态与非模态页面
查看>>
POJ - 3090 gcd水题
查看>>
第四讲 深入介绍信号与槽
查看>>
.gitignore梳理
查看>>
Lucene/Solr搜索引擎开发笔记 - 写作方向调整
查看>>
JavaScript 数据类型小结
查看>>
-webkit-overflow-scrolling:touch iosBug
查看>>
HDU2028:Lowest Common Multiple Plus
查看>>