[luogu5537]系统设计
考虑哈希,令$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]系统设计的更多相关文章
- [Django]用户权限学习系列之设计自有权限管理系统设计思路
若在阅读本片文章遇到权限操作问题,请查看本系列的前两章! http://www.cnblogs.com/CQ-LQJ/p/5609690.html和http://www.cnblogs.com/CQ- ...
- Web应用多账号系统设计及微信扫码登录实现
Web应用多账号系统设计及微信扫码登录实现 1 前言概述 公司对功能测试,性能测试,安全测试等等都做了比较好的自动化后,急需要一个MIS系统来统一管理这些结果及报表. 此MIS系统特点如下: 仅内 ...
- 【开源】OSharp框架解说系列(6.1):日志系统设计
OSharp是什么? OSharp是个快速开发框架,但不是一个大而全的包罗万象的框架,严格的说,OSharp中什么都没有实现.与其他大而全的框架最大的不同点,就是OSharp只做抽象封装,不做实现.依 ...
- 分布式系统设计权衡之CAP
写在最前: 1.为什么学习并记录分布式设计理念一系列相关的东西 在日常工作中系统设计评审的时候,经常会有一些同事抛出一些概念,高可用性,一致性等等字眼,他们用这些最基本的概念去反驳系统最初的设计,但是 ...
- 基于C/S架构的3D对战网络游戏C++框架_02系统设计(总体设计、概要设计)
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
- [课程设计]Scrum 3.8 多鱼点餐系统开发进度(留言反馈系统设计)
Scrum 3.8 多鱼点餐系统开发进度(留言反馈系统设计) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统 ...
- NI Labview 将图形化系统设计用于肿瘤治疗
NI Labview 将图形化系统设计用于肿瘤治疗 - Jeff Stevens, Sanarus 挑战:在严格的规则条例范围内保持设计过程的情况下,为通过FDA认证的等级II医疗设备进行设计.原型并 ...
- <转>简单之美——系统设计黄金法则
作者: 包云岗 发布时间: 2012-05-19 13:06 阅读: 3036 次 推荐: 1 原文链接 [收藏] 最近多次看到系统设计与实现的文章与讨论,再加上以前读过的其他资料以及自 ...
- atitit.userService 用户系统设计 v4 q316 .doc
atitit.userService 用户系统设计 v4 q316 .doc 1. 新特性1 2. Admin login1 3. 用户注册登录2 3.1. <!-- 会员注册使用 --> ...
随机推荐
- 为代码编写稳定的单元测试 [Go]
为代码编写稳定的单元测试 本文档配套代码仓库地址: https://github.com/liweiforeveryoung/curd_demo 配合 git checkout 出指定 commit ...
- C11 (GNU Dialect) -std=gnu11 和 -std=c11
C11 (GNU Dialect) -std=gnu11 和 -std=c11 C11 (GNU Dialect) -std=gnu11 和 -std=c11 用于 IntelliSense 的 C ...
- 小白自制Linux开发板 八. Linux音频驱动配置
不知不觉小白自制开发板系列已经到第八篇了,本篇要配置的是音频驱动,也算是硬件部分的最后一片了,积攒的文章也差不多全放完了,后续更新可能会放缓,还请见谅. 对于F1C200s是自带了多媒体处理功能的,所 ...
- 【c++ Prime 学习笔记】第19章 特殊工具与技术
某些程序对内存分配有特殊要求,不能直接使用标准内存管理机制 重载new和delete算符可控制内存分配的过程 19.1.1 重载new和delete 说法"重载new和delete" ...
- 什么是产品待办列表?(What is Product Backlog)
正如scrum指南中所描述的,产品待办事项列表是一个紧急而有序的列表,其中列出了改进产品所需的内容.它是scrum团队承担的工作的唯一来源. 在sprint计划 (Sprint Planning)活动 ...
- 软件案例分析——VS、VS Code
软件案例分析--VS和VS Code 第一部分 调研,测评 一.使用10–30分钟这个软件的基本功能(请上传使用软件的照片) VS code Visual Studio 二.主要功能和目标用户有何不同 ...
- kafka生产者和消费者api的简单使用
kafka生产者和消费者api的简单使用 一.背景 二.需要实现的功能 1.生产者实现功能 1.KafkaProducer线程安全的,可以在多线程中使用. 2.消息发送的key和value的序列化 3 ...
- spring social理解
现在互联网飞速发展,人们每天在互联网上冲浪,获取各种信息.各大网站为了方便用户的登录,提供了各式各样的社交登录,比如:QQ.微信和微博登录等.这些主流的社交登录大多是基于oauth协议进行实现,spr ...
- DDD领域驱动设计-案例建模设计-Ⅲ
1. 背景 参考<DDD领域驱动设计-案例需求文档>,本文将构建实体,聚合根详述领域驱动中的建模设计.构建实体,聚合根的一些原则或方法,将在后续文章中说明. 2. 建模设计 2.1. 实体 ...
- Luogu P2024 [NOI2001]食物链 | 并查集
题目链接 思路:并查集,因为一开始我们并不知道每一只动物是哪一个种类的,所以我们干脆建立三倍于n的空间,1~n这三分之一用来存第i只动物是A的情况,n+1~2n这三分之一用来存第(i-n)只动物是B的 ...