题目链接:点击查看

题目大意:给出 n 个字符串,再给出 m 次询问,每次询问需要输出区间 [ l , r ] 内的所有字符串有多少个不同的前缀,要求算法强制在线

题目分析:统计字符串的前缀,不难想到借助字典树实现,再将问题简化为在线求区间 [ l , r ] 内不同数字的个数,这就是主席树的基本应用了,两个模板搭配起来就是这个问题的答案了

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=1e5+100;
/*主席树*/
struct Node
{int l,r;int sum;
}tree[N*40];int cnt,root[N];void change(int pos,int &k,int l,int r,int val)
{tree[cnt++]=tree[k];k=cnt-1;tree[k].sum+=val;if(l==r)return;int mid=l+r>>1;if(pos<=mid)change(pos,tree[k].l,l,mid,val);elsechange(pos,tree[k].r,mid+1,r,val);
}int query(int rt,int pos,int l,int r)
{if(l==r)return tree[rt].sum;int mid=l+r>>1;if(pos<=mid)return tree[tree[rt].r].sum+query(tree[rt].l,pos,l,mid);elsereturn query(tree[rt].r,pos,mid+1,r);
}
/*主席树*/
/*字典树*/
string s[N];int k;int trie[N][26];//储存每一条边  trie[节点数][字符数]int pre[N];//判断某一个字符串是否出现过int newnode()
{k++;for(int i=0;i<26;i++)trie[k][i]=0;pre[k]=0;return k;
}void insert(string& s)//插入
{int pos=0;for(int i=0;i<s.size();i++){int to=s[i]-'a';if(!trie[pos][to])trie[pos][to]=newnode();pos=trie[pos][to];}
}void search(string& s,int id,int n)//查找
{int pos=0;for(int i=0;i<s.size();i++){int to=s[i]-'a';pos=trie[pos][to];if(pre[pos])change(pre[pos],root[id],1,n,-1);change(id,root[id],1,n,1);pre[pos]=id;}
}
/*字典树*/
void init()
{root[0]=0;tree[0].l=tree[0].r=tree[0].sum=0;cnt=1;k=-1;newnode();
}int main()
{
#ifndef ONLINE_JUDGE
//  freopen("input.txt","r",stdin);
//  freopen("output.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);int n;while(scanf("%d",&n)!=EOF){init();for(int i=1;i<=n;i++){cin>>s[i];insert(s[i]);}for(int i=1;i<=n;i++){root[i]=root[i-1];search(s[i],i,n);}int m;scanf("%d",&m);int ans=0;while(m--){int l,r;scanf("%d%d",&l,&r);l=(l+ans)%n+1;r=(r+ans)%n+1;if(l>r)swap(l,r);printf("%d\n",ans=query(root[r],l,1,n));}}return 0;
}

HDU - 5790 Prefix(主席树+字典树)相关推荐

  1. HDU 1247 Hat’s Words 字典树(Trie树)

    HDU 1247 Hat's Words 字典树(Trie树) 字典树的建立是应该都是一样的 下面是我的做法: 建立完后, 对每一个单词都进行find_string()判断是否符合, 分别对其分成两半 ...

  2. Algorithm:树结构(二叉树/多路查找树/字典树)的简介、具体结构(FBT/CBT/BST/BBT/Heap/Huffman、B树/B+树/R树、字典树)及其运算(增删查/遍历/旋转)、代码实现

    Algorithm:树结构(二叉树/多路查找树/字典树)的简介.具体结构(FBT/CBT/BST/BBT/Heap/Huffman.B树/B+树/R树.字典树)及其运算(增删查/遍历/旋转).代码实现 ...

  3. hdu 1251 统计难题(字典树)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1251 分析: 关于字典树的题目似乎都有一个普通适用性的模板,有时只是稍加改动来满足临时的要求,我的一 ...

  4. hdu 4099 Revenge of Fibonacci 字典树+大数

    将斐波那契的前100000个,每个的前40位都插入到字典树里(其他位数删掉),然后直接查询字典树就行. 此题坑点在于 1.字典树的深度不能太大,事实上,超过40在hdu就会MLE-- 2.若大数加法时 ...

  5. HDU 5687 Problem C (字典树)

    题意: 度熊手上有一本神奇的字典,你可以在它里面做如下三个操作: 1.insert : 往神奇字典中插入一个单词 2.delete: 在神奇字典中删除所有前缀等于给定字符串的单词 3.search: ...

  6. Trie(前缀树/字典树)及其应用

    from:https://www.cnblogs.com/justinh/p/7716421.html Trie,又经常叫前缀树,字典树等等.它有很多变种,如后缀树,Radix Tree/Trie,P ...

  7. 【数据结构】前缀树/字典树

    目录 1.概述 2.代码实现 3.应用 本文参考: LeetCode 208.实现 Trie (前缀树) 1.概述 前缀树又称字典树.Trie 树.单词查找树,是一棵有根树,同时也是一种哈希树的变种, ...

  8. Luogu P2580 于是他错误的点名开始了 Trie树 字典树

    字典树裸题.每次插入询问串,查询的时候拿出来直接查,信息保留在节点上. #include <bits/stdc++.h> using namespace std;char s[51]; i ...

  9. HDU 5536 Chip Factory 01字典树

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5536 题意:数组中求 i,j,k 最大的(A[i] + A[j]) xor A[k] i != j ...

最新文章

  1. 原生js实现触摸滚动轮播图
  2. 初始html(常用标签)
  3. phpcms后台系统怎么去掉html目录_电子笔记本 | 好记性胜过烂笔头?基于python3的知识管理系统...
  4. 阿里云Redis (安装包安装篇)
  5. 服务器克隆机网络端口排错
  6. 你值得拥有的 11 个前端开发利器
  7. 关于移动端设备适配的问题
  8. 机顶盒系统升级服务器地址,网络机顶盒怎么升级?详细教程分享
  9. UESTC 1634 去年春恨却来时,落花人独立,微雨燕双飞
  10. 如何清理卸下应用的残余文件_怎么清理手机卸载残留 需要技巧
  11. Vue使用谷歌统计和百度统计
  12. Android网络框架-Volley实践 使用Volley打造自定义ListView
  13. vue标签上自定义动态背景图片
  14. LearnOpenGL14——混合以及处理半透明物体
  15. win10触摸板升级教程
  16. excel查找出不来了_Excel查找明明存在的数据却查不到,是什么原因?|excel表格数据为什么搜查不到...
  17. js typeof undefined
  18. ArcBlock荣获“2018区块链之星”奖项
  19. 常见互联网公司职级和薪资一览!有条件的一定要进大厂,薪水是真高!
  20. 机车计算机模糊规则表,计算机编制机车周转图有什么要求?

热门文章

  1. Sentinel限流规则
  2. ArrayBlockingQueue原理分析
  3. volatile 关键字是如何保证可见性的?
  4. HDFS的API操作-访问权限问题
  5. 请求参数绑定集合类型
  6. Stream流中的常用方法_forEach
  7. Zookeeper_原生API操作(一)
  8. 多库共存 包装集的问题 点击按钮创建一个p 几个属性介绍 jQuery的插件
  9. Java中头指针和头结点_. 2 . 【严题集 2.1① 描述以下三个概念的区别:头指针、头结点、首元结点(第一个元素结点)。...
  10. 访问动态页面很慢 PHP,PHP动态网页程序优化及高效提速问题