考虑哈希,令$h[x]$表示根到$x$路径的哈希值,那么有$h[x]+hash(l,r)=h[ans]$

考虑用线段树维护$a_{i}$的区间哈希值,并用map去找到对应的$ans$

但还有一个问题,就是并不一定都能走完,可以在线段树上二分走到哪里,时间复杂度为$o(n\log^{2}n)$

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 500005
4 #define L (k<<1)
5 #define R (L+1)
6 #define mid (l+r>>1)
7 #define base 500007
8 #define mod 998244353
9 vector<int>v[N];
10 map<int,int>mat;
11 int rt,n,m,q,p,x,y,z,h[N],mi[N],f[N<<2];
12 void update(int k,int l,int r,int x,int y){
13 if (l==r){
14 f[k]=y;
15 return;
16 }
17 if (x<=mid)update(L,l,mid,x,y);
18 else update(R,mid+1,r,x,y);
19 f[k]=(1LL*f[L]*mi[r-mid]+f[R])%mod;
20 }
21 int query(int k,int l,int r,int x,int y){
22 if ((l>y)||(x>r))return 0;
23 if ((x<=l)&&(r<=y))return f[k];
24 int ll=max(mid+1,x),rr=min(r,y),len=max(rr-ll+1,0);
25 return (1LL*query(L,l,mid,x,y)*mi[len]+query(R,mid+1,r,x,y))%mod;
26 }
27 int query(int k,int l,int r,int x,int y,int z){
28 if ((l>y)||(x>r)||(!mat[z]))return 0;
29 if (l==r)return mat[z];
30 int ll=max(l,x),rr=min(mid,y),len=max(rr-ll+1,0);
31 int ans=query(R,mid+1,r,x,y,(1LL*z*mi[len]+query(1,1,n,ll,rr))%mod);
32 if (ans)return ans;
33 return query(L,l,mid,x,y,z);
34 }
35 void dfs(int k,int s){
36 h[k]=s;
37 mat[s]=k;
38 for(int i=0;i<v[k].size();i++)dfs(v[k][i],(1LL*s*base+i+1)%mod);
39 }
40 int main(){
41 mi[0]=1;
42 for(int i=1;i<N-4;i++)mi[i]=1LL*mi[i-1]*base%mod;
43 scanf("%d%d%d",&n,&m,&q);
44 for(int i=1;i<=n;i++){
45 scanf("%d",&x);
46 if (!x)rt=i;
47 else v[x].push_back(i);
48 }
49 dfs(rt,0);
50 for(int i=1;i<=m;i++){
51 scanf("%d",&x);
52 update(1,1,m,i,x);
53 }
54 for(int i=1;i<=q;i++){
55 scanf("%d%d%d",&p,&x,&y);
56 if (p==2)update(1,1,m,x,y);
57 else{
58 scanf("%d",&z);
59 int hh=(1LL*h[x]*mi[z-y+1]+query(1,1,m,y,z))%mod;
60 if (mat[hh])printf("%d\n",mat[hh]);
61 else printf("%d\n",query(1,1,m,y,z,h[x]));
62 }
63 }
64 }

[luogu5537]系统设计的更多相关文章

  1. [Django]用户权限学习系列之设计自有权限管理系统设计思路

    若在阅读本片文章遇到权限操作问题,请查看本系列的前两章! http://www.cnblogs.com/CQ-LQJ/p/5609690.html和http://www.cnblogs.com/CQ- ...

  2. Web应用多账号系统设计及微信扫码登录实现

    Web应用多账号系统设计及微信扫码登录实现 1   前言概述 公司对功能测试,性能测试,安全测试等等都做了比较好的自动化后,急需要一个MIS系统来统一管理这些结果及报表. 此MIS系统特点如下: 仅内 ...

  3. 【开源】OSharp框架解说系列(6.1):日志系统设计

    OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...

  4. 分布式系统设计权衡之CAP

    写在最前: 1.为什么学习并记录分布式设计理念一系列相关的东西 在日常工作中系统设计评审的时候,经常会有一些同事抛出一些概念,高可用性,一致性等等字眼,他们用这些最基本的概念去反驳系统最初的设计,但是 ...

  5. 基于C/S架构的3D对战网络游戏C++框架 _02系统设计(总体设计、概要设计)

    本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...

  6. [课程设计]Scrum 3.8 多鱼点餐系统开发进度(留言反馈系统设计)

    Scrum 3.8 多鱼点餐系统开发进度(留言反馈系统设计) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统 ...

  7. NI Labview 将图形化系统设计用于肿瘤治疗

    NI Labview 将图形化系统设计用于肿瘤治疗 - Jeff Stevens, Sanarus 挑战:在严格的规则条例范围内保持设计过程的情况下,为通过FDA认证的等级II医疗设备进行设计.原型并 ...

  8. <转>简单之美——系统设计黄金法则

    作者: 包云岗  发布时间: 2012-05-19 13:06  阅读: 3036 次  推荐: 1   原文链接   [收藏] 最近多次看到系统设计与实现的文章与讨论,再加上以前读过的其他资料以及自 ...

  9. atitit.userService 用户系统设计 v4 q316 .doc

    atitit.userService 用户系统设计 v4 q316 .doc 1. 新特性1 2. Admin  login1 3. 用户注册登录2 3.1. <!-- 会员注册使用 --> ...

随机推荐

  1. PHP审计之PHP反序列化漏洞

    PHP审计之PHP反序列化漏洞 前言 一直不懂,PHP反序列化感觉上比Java的反序列化难上不少.但归根结底还是serialize和unserialize中的一些问题. 在此不做多的介绍. 魔术方法 ...

  2. 使用python -m pip install 和 pip install 安装包有什么区别?

    如果去看源码的话,你会发现 pip 作为执行文件的入口点是 pip._internal.main. 另一方面,pip 作为模块运行时入口是 _main.py,而该模块也只是调用 pip.interna ...

  3. 重磅 | 阿里开源首个 Serverless 开发者平台 Serverless Devs

    Serverless 从概念提出到应用,已经走过了 8 个年头,开发者对 Serverless 的使用热情不断高涨.为帮助开发者实现一键体验多云产品,极速部署 Serverless 项目,10 月 2 ...

  4. RabbitMQ持久化机制、内存磁盘控制(四)

    一.持久化 如果看到这一篇文章的朋友,都是有经验的开发人员,对持久化的概念就不用再做过多的解析了,经过前面的几篇文章,其实不难发现RabbitMQ 的持久化其实就只分交换器持久化.队列持久化和消息持久 ...

  5. FFT 的一些技巧

    三次变两次 FFT 我们发现: \[(F(x)+iG(x))^2=F(x)^2-G(x)^2+2iF(x)G(x) \] 也就是说,我们把 \(F(x)\) 作为实部,\(G(x)\) 作为虚部,那么 ...

  6. 【UE4 C++】 外部图片读取、Texture 保存 png

    蓝图版 导入外部图片 file://E:/UE___Projects_Test/MyProjectAAA/Plugins/WXimage.jpg 导出图图片 一般导出 .hdr 文件 导出 png 设 ...

  7. kivy 选择框

    from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.lang import builder # 注册 ...

  8. 实用小工具:screen

    实用小工具:screen 首先,吹爆screen screen,实现了不间断的会话服务,通过SSH连接至远程服务器,当使用了screen开启的会话,不会因为你断开SSH而中断在远程服务器上运行的命令. ...

  9. VS2019、Qt5.12及QGis3.16开发常见问题汇总

    在C++.Qt软件开发过程中,常常遇到一些编译错误或警告:本文将VS2019.Qt5.12.10和QGis3.16.10的二次开发过程常见的问题做了整理,供大家参考,也便于日后查阅.该内容分为四部分: ...

  10. Linux 系统 Oracle 11g 修改监听端口

    1.查看监听:lsnrctl status 2.停止监听:lsnrctl stop 3.修改oracle安装目录的下的配置文件listener.ora:一般路径为自己Oracle安装目录+/app/o ...