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

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

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

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

#include<cstdio>
#include<cstring>
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<j;i++){
if(!son(x,w=s[i]-'a'))addedge(x,++tot,w);
x=son(x,w);
if(i==j-1)v[x]=p;
}
}
void dfs(int x){
if(v[x])a[v[x]]=++now;
seq[st[x]=++dfn]=a[v[x]];
for(int i=0;i<26;i++)if(son(x,i))dfs(son(x,i));
en[x]=dfn;
}
int add(int x,int a,int b,int c){
int y=++cnt;
val[y]=val[x]+1;
if(a==b)return y;
int mid=(a+b)>>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<j;x=son(x,w),i++)if(!son(x,w=ch[i]-'a'))return -1;
y=root[st[x]-1],x=root[en[x]];
if(val[x]-val[y]<k)return -1;
while(c<d){
mid=(c+d)>>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;
}

  

BZOJ3448 : [Usaco2014 Feb]Auto-complete的更多相关文章

  1. BZOJ_3448_[Usaco2014 Feb]Auto-complete_Trie树

    BZOJ_3448_[Usaco2014 Feb]Auto-complete_Trie Description Bessie the cow has a new cell phone and enjo ...

  2. mapReduce编程之auto complete

    1 n-gram模型与auto complete n-gram模型是假设文本中一个词出现的概率只与它前面的N-1个词相关.auto complete的原理就是,根据用户输入的词,将后续出现概率较大的词 ...

  3. Atitit.auto complete 自动完成控件的实现总结

    Atitit.auto complete  自动完成控件的实现总结 1. 框架选型 1 2. 自动完成控件的ioc设置 1 3. Liger  自动完成控件问题 1 4. 官网上的code有问题,不能 ...

  4. BZOJ 3446: [Usaco2014 Feb]Cow Decathlon( 状压dp )

    水状压dp. dp(x, s) = max{ dp( x - 1, s - {h} ) } + 奖励(假如拿到的) (h∈s). 时间复杂度O(n * 2^n) ------------------- ...

  5. 如何开发auto complete 智能提示功能

    目录(?)[+] 如何开发auto complete 智能提示功能 最近网上好像流传用redis实现,其实智能提示和用什么存储关系不大 07年,我过一个类似的项目 我有几千个名字,随着用户在输入框中不 ...

  6. Goole Search Auto Complete

    这个项目就九章算法大数据课程的一个项目.主要分为两步: 第一步是 offline 建立 数据库 我们用两个map reduce 的data pipline 来实现. 第二步是 online显示把数据里 ...

  7. Atitit.auto complete 自己主动完毕控件的实现总结

    Atitit.auto complete  自己主动完毕控件的实现总结 1. 框架选型 1 2. 自己主动完毕控件的ioc设置 1 3. Liger  自己主动完毕控件问题 1 4. 官网上的code ...

  8. bzoj3446[Usaco2014 Feb]Cow Decathlon*

    bzoj3446[Usaco2014 Feb]Cow Decathlon 题意: FJ有n头奶牛.FJ提供n种不同的技能供奶牛们学习,每头奶牛只能学习一门技能,每门技能都要有奶牛学习. 第i头奶牛学习 ...

  9. kubectl alias auto complete

    平时kubectl命令管理kubernetes,敲久了就觉得比较麻烦,想着使用alias k来代替kubectl,可是当输入k时没有了自动补全的功能 这里在 ~/.bashrc 添加如下配置后,可以自 ...

随机推荐

  1. rails命令避免直接操作数据库

    文章是从我的个人主页上粘贴过来的, 大家也可以访问我的主页 www.iwangzheng.com 今天在数据库里新增人员的时候出了点小问题,有人员重复了,以至于要删除一些,大师和pp指导完成的. $r ...

  2. 2015安徽省赛 B.求和

    题目描述 对于正整数n,k,我们定义这样一个函数f,它满足如下规律 现在给出n和k,你的任务就是要计算f(n,k)的值. 输入 首先是一个整数T,表示有T组数据 接下来每组数据是n和k(1<=n ...

  3. make_head,,,pop_head,,,push_head,,,sort_head..

    STL中,有很多的排序函数模板供我们调用,省去我们自己编写一些排序过程的麻烦.本文是一篇关于STL中堆排序的一个介绍. 本文涉及的几个函数如下:make_heap(), push_heap(), po ...

  4. hdparm测试硬盘性能

    <1>Centos安装hdparm测试硬盘性能 一.安装hdparm yum install hdparm -y Linux学习,http:// linux.it.net.cn 二.评估读 ...

  5. 如何下载google play免费应用的apk文件

    到这里: http://apps.evozi.com/apk-downloader/ 一看便知.

  6. 《转》.NET开源核心运行时,且行且珍惜

    转载自infoQ 背景 InfoQ中文站此前报道过,2014年11月12日,ASP.NET之父.微软云计算与企业级产品工程部执行副总裁Scott Guthrie,在Connect全球开发者在线会议上宣 ...

  7. 利用 FFmpeg palettegen paletteuse 生成接近全色的 gif 动画

    下载FFmpeg-VideoToGif-v1.0.bat.7z FFmpeg 2.6 及以上版本有效 未使用palette时 使用palette后 @echo off set inFile=2015. ...

  8. Tickeys -- 找对打字的感觉 (机械键盘音效软件)

    最近发现公司里面越来越多人开始用机械键盘了,问了很多人为什么用机械键盘,主要有两种,一种是真的情怀,他们怀念十年前那种台式机硬邦邦的键盘,另外一种是因为喜欢机械键盘的声音,打字很爽.前者那真是没救了, ...

  9. SELECT的解析顺序及慢查询优化

    标准的 SQL 的解析顺序为:(1)FROM 子句, 组装来自不同数据源的数据(2)WHERE 子句, 基于指定的条件对记录进行筛选(3)GROUP BY 子句, 将数据划分为多个分组(4)使用聚合函 ...

  10. Java Hour 47 WeatherInfo 保存到数据库

    经历了上周简单的休整以后,我们继续Hibernate 之旅. 保存到数据库 private void saveWeatherInfo(Weatherinfo weatherInfo) { // Sav ...