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

青海餐饮网站建设成都seo整站

青海餐饮网站建设,成都seo整站,惠州市 网站开发公司,乌鲁木齐公司网站建设题面 先把每个串反着插进$Trie$树 每个节点的子树内&#xff0c;可能有一些节点是某些字符串的开头 每个节点挂一棵权值线段树&#xff0c;记录这些节点对应的原来字符串的编号 查询的时候在线段树上二分即可 为了节省空间&#xff0c;使用线段树合并 1 #include <vector>…

题面

先把每个串反着插进$Trie$树

每个节点的子树内,可能有一些节点是某些字符串的开头

每个节点挂一棵权值线段树,记录这些节点对应的原来字符串的编号

查询的时候在线段树上二分即可

为了节省空间,使用线段树合并

  1 #include <vector>
  2 #include <cstdio>
  3 #include <cstring>
  4 #include <algorithm>
  5 #define N1 100100
  6 #define M1 (N1*3)
  7 #define idx(X) (X-'a')
  8 using namespace std;
  9 
 10 char str[M1];
 11 int a[N1],n;
 12 
 13 struct SEG{
 14 int sz[N1*100],ls[N1*100],rs[N1*100],root[M1],tot;
 15 inline void pushup(int rt){ sz[rt]=sz[ls[rt]]+sz[rs[rt]]; }
 16 void update(int x,int l,int r,int &rt,int w)
 17 {
 18     if(!rt) rt=++tot;
 19     if(l==r){ sz[rt]+=w; return; }
 20     int mid=(l+r)>>1; 
 21     if(x<=mid) update(x,l,mid,ls[rt],w);
 22     else update(x,mid+1,r,rs[rt],w);
 23     pushup(rt);
 24 }
 25 int merge(int l,int r,int r1,int r2)
 26 {
 27     if(!r1||!r2) return r1+r2;
 28     int mid=(l+r)>>1,rt=++tot;
 29     //sz[rt]=sz[r1]+sz[r2];
 30     ls[rt]=merge(l,mid,ls[r1],ls[r2]);
 31     rs[rt]=merge(mid+1,r,rs[r1],rs[r2]);
 32     pushup(rt);
 33     return rt;
 34 }
 35 int query(int l,int r,int rt,int K)
 36 { 
 37     if(K>sz[rt]) return -1;
 38     if(l==r) return l;
 39     int mid=(l+r)>>1;
 40     if(K>sz[ls[rt]]) return query(mid+1,r,rs[rt],K-sz[ls[rt]]);
 41     else return query(l,mid,ls[rt],K);
 42 }
 43 }s;
 44 
 45 namespace Trie{
 46 int ch[M1][26],dep[M1],fa[M1],tot;
 47 vector<int>ed[M1];
 48 void insert(int len,int id,int *pos)
 49 {
 50     int x=0,c,i;
 51     for(i=len;i>=1;i--)
 52     {
 53         c=idx(str[i]);
 54         if(!ch[x][c]) 
 55             ch[x][c]=++tot,dep[tot]=dep[x]+1,fa[tot]=x;
 56         x=ch[x][c];
 57     }
 58     ed[x].push_back(id);
 59     pos[id]=x;
 60 }
 61 int hs[M1],que[M1];
 62 void build()
 63 {
 64     int i,j,id,x;
 65     for(i=1;i<=tot;i++) hs[dep[i]]++;
 66     for(i=1;i<=tot;i++) hs[i]+=hs[i-1];
 67     for(i=1;i<=tot;i++) que[hs[dep[i]]--]=i;
 68     for(i=tot;i>=1;i--)
 69     {
 70         x=que[i];
 71         for(j=0;j<ed[x].size();j++)
 72         {
 73             id=ed[x][j];
 74             s.update(id,1,n,s.root[x],1);
 75         }
 76     }
 77     for(i=tot;i>=1;i--)
 78     {
 79         x=que[i];
 80         s.root[fa[x]]=s.merge(1,n,s.root[x],s.root[fa[x]]);
 81     }
 82 }
 83 };
 84 
 85 int pos[M1];
 86 int main()
 87 {
 88     scanf("%d",&n);
 89     int i,j,k,cnt,L;
 90     for(i=1;i<=n;i++)
 91     {
 92         scanf("%s",str+1);
 93         L=strlen(str+1);
 94         Trie::insert(L,i,pos);
 95     }
 96     Trie::build();
 97     for(i=1;i<=n;i++)
 98     {
 99         scanf("%d",&a[i]);
100         printf("%d\n",s.query(1,n,s.root[pos[i]],a[i]));
101     }
102     return 0;
103 }

 

转载于:https://www.cnblogs.com/guapisolo/p/10308686.html

http://www.lbrq.cn/news/2677501.html

相关文章:

  • 可信网站查询手机卡顿优化软件
  • 乐山旅游英文网站建设网络推广的工作内容
  • web前端网站建设开题报告网络营销怎么做推广
  • 用php做网站上传图片的代码网站如何优化关键词排名
  • 微信公众号手机网站开发成都网站建设制作公司
  • wordpress主题图片路径免费seo快速排名工具
  • 国外高端网站免费网址注册
  • CSS3网站建设上海不限关键词优化
  • 地下城做解封任务的网站哪里有营销策划培训班
  • 怎么做视频网站教程百度排名优化工具
  • 做网站常州百度快照关键词推广
  • 网站欢迎屏怎么做推广吧
  • 万峰科技.jsp网站开发四酷全书 m百度联系电话
  • 网站开发涉及内容网上卖货的平台有哪些
  • 移动端网站开发项目代刷网站推广快速
  • 政府网站建设模式网店推广方案策划书
  • 嘉兴市平湖市建设局网站网站开发软件有哪些
  • 域度设计网站sem seo
  • WordPress二级目录404一个网站可以优化多少关键词
  • 网站没备案可以上线吗北京中文seo
  • 网站改版怎么做301重定向游戏推广代理加盟
  • xp 做网站服务器杭州百度快照优化公司
  • 自己电脑怎样做网站icp备案查询
  • 绍兴网站关键词推广营销技巧美剧
  • 荔湾区做网站公司做公司网站的公司
  • 建设个人网银网站南京疫情最新消息
  • 58网站模板广州网站优化公司
  • 网站建设费一般摊销几年产品推广营销方案
  • 多视频网站建设网络广告人社区
  • 可以做动感影集的网站百度收录情况查询
  • 41.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--集成网关--网关集成Swagger
  • 视觉相机偏移补偿
  • 如何理解SA_RESTART”被信号中断的系统调用自动重启“?
  • 视图是什么?有什么用?什么时候用?MySQL中的视图
  • Baumer高防护相机如何通过YoloV8深度学习模型实现输电线路塔电缆检测分割(C#代码UI界面版)
  • 微软将于 10 月停止混合 Exchange 中的共享 EWS 访问