首页 > 其他分享 >2023.3 做题记录

2023.3 做题记录

时间:2024-03-03 22:13:21浏览次数:37  
标签:记录 ed st 2023.3 哈希 hs 考虑 dp

2023.3 做题记录

注:只摘录具有较高思考价值以及较高思维含量的题目(说白了就是颓出来的题)。

[JSOI2008] 火星人

我们只考虑查询操作,方法很多,例如 KMP、哈希、SA。

此时考虑修改,由于 KMP、SA 不好维护修改后的数组,因此考虑哈希。

我们利用二分答案的方式求出长度,利用哈希检查即可。

现在考虑 2,3 操作,由于有插入,我们考虑用平衡树维护哈希值。

显然如果这样考虑,我们是按下标排序。

接下来考虑如何求出哈希值,也就是怎么写 pushup。有下列式子:

\[hs_p=hs_{lp}\times base^{sz_{rp}+1}+val_p\times base^{sz_{rp}}+hs_{rp} \]

这样我们利用平衡树维护一下就行了。

  • 注意不保证 \(x<y\)
  • 注意 \(x\) 可能是叶子结点,因此修改时需要同时修改 \(val\) 和 \(hs\)。

[TJOI2013] 最长上升子序列

首先有这样一条显然但就是看不出来的性质:

新插入的数必然比前面的数要大。

因此根据朴素的转移方程 \(dp_i=\max\{dp_j\}+1\),我们只需要将当前位置前面的最大值加一就是当前位置新的 \(dp\) 值。

又由于上面的性质,所以只会影响当前节点,对前后都没有影响。

接下来考虑插入操作,显然使用平衡树。

那么我们使用区间平衡树维护区间最大值,也就是维护 \(dp\) 和 \(maxdp\)。

此时两者的求法就很显然了。

星系探索

(其实这道题 \(80\%\) 都是自己想的)

首先这是一个树上问题,并且不能用树剖简单求解。

考虑将这棵树转化为序列。那么常用方式有两种,DFS 序和欧拉序。

经过一点点推理可以发现,欧拉序实现起来较为简单。

如果你学过树上莫队,那么应该对欧拉序的处理方式比较熟悉。将第一次出现的位置 \(st_i\) 记为正,第二次出现的位置 \(ed_i\) 记为负。

于是查询操作就很简单了,对区间 \([1,st_i]\) 求和即可。

同时子树修改也应该较为简单,将区间 \([st_i,ed_i]\) 内的元素加上 \(q\) 即可。

现在就剩下换父亲了。经过模拟以及一些感性理解可以得到,将 \(x\) 的父亲换成 \(y\) 在欧拉序上表现为将区间 \([st_x,ed_x]\) 移到 \(st_y\) 的后面。

(其实也可以是移到 \(ed_y\) 的前面,区别就在于你接到哪个子树上)

对于这种平移区间的问题,考虑平衡树求解。

Splay 可以维护,但是 FHQ-Treap 可以直接分裂合并,比较方便。

剩下的全是细节了。

(好像这是一个数据结构叫 ETT)

  • 注意要开 long long

标签:记录,ed,st,2023.3,哈希,hs,考虑,dp
From: https://www.cnblogs.com/dzbblog/p/18050852

相关文章

  • 6. 活动记录 | 2. Tiger 编译器的栈帧
    栈帧栈帧是指函数在被调用时,所拥有的一块独立的用于存放函数所使用的状态和变量的栈空间。每个函数都对应有至少一个栈帧。同一个函数多次进入,每次可能会分配到不同的栈帧。整个栈的内容在同一个时刻可以看作是由许多栈帧依序“堆叠”组成的。两层抽象Translate模块frame......
  • 红米note4x mido移植Ubuntu20.04过程记录
    mido设备移植Ubuntu20.04一、初始化环境1.安装编译依赖环境#这里宿主机使用Ubuntu20.04系统sudoaptinstallbinfmt-supportqemu-user-staticgcc-10-aarch64-linux-gnukernel-packagefakerootsimg2imgimg2simgmkbootimgbisonflexgcc-aarch64-linux-gnupkg-config......
  • 利用单例模式与阻塞队列实现异步的日志系统,记录服务器运行状态
    目录类结构概述主要特性总结Log类是一个用于日志记录的C++类,其设计具有以下特点和功能:类结构概述类成员变量:path_:日志文件存储路径。suffix_:日志文件后缀名。MAX_LINES_:每个日志文件允许的最大行数。lineCount_:当前日志文件已写的行数。toDay_:当前日志文......
  • 牛客大厂真题刷题记录
    1、问题:统计在有用户互动的最近一个月(按包含当天在内的近30天算,比如10月31日的近30天为10.2~10.31之间的数据)中,每类视频的转发量和转发率(保留3位小数)。注:转发率=转发量÷播放量。结果按转发率降序排序。selecttag,sum(if_retweet)retweet_cut,round(sum(if_retweet)/coun......
  • SQL intern 29题记录及心得
    表结构21、豹子手机号用户(4个连续数字,如6666)和非豹子号用户的笔均消费金额分别是多少?withbas(selectusr_id,casewhenphone_numREGEXP'[0-9](?=\\1{3})'THEN'Leopard'`else'no-Leopard'`endasis_豹子fromid_inf)selectavg(a.trx_amt),is_豹......
  • Windows 系统日志是记录操作系统活动的重要组成部分,对于入侵排查和溯源来说,分析系统日
    Windows系统日志是记录操作系统活动的重要组成部分,对于入侵排查和溯源来说,分析系统日志是非常关键的一步。以下是针对Windows系统日志分析和溯源的基础技术原理:事件日志:Windows操作系统生成多个类型的事件日志,包括应用程序日志、安全日志和系统日志。了解不同类型的事件日......
  • PowerShell中,你可以使用以下命令来操作Windows防火墙并记录流量信息
    在PowerShell中,你可以使用以下命令来操作Windows防火墙并记录流量信息:操作Windows防火墙:查看当前的防火墙规则:powershellCopyCodeGet-NetFirewallRule创建新的防火墙规则:powershellCopyCodeNew-NetFirewallRule-DisplayName"MyFirewallRule"-DirectionInbound-A......
  • 随笔记录篇——C++iostream库 以及std
    这篇文章非原创,来自我学习过程中看到的其他博主发的一些资料,解决了我的疑问,在此进行整理。C语言的标准输入输出库是stdio.h库,是一个函数库,而不是类库。其中包含了我们其中所用的scanfpringf都是一些独立的全局函数,因为C语言是不支持类的。C++的标准输入输出库iostream是一个类......
  • AtCoder DP Contest vp 记录
    题单。A从\(i-1\)与\(i-2\)转移即可。#include<bits/stdc++.h>usingnamespacestd;intn;inth[100031];intdp[100031];intmain(){ cin>>n; for(inti=1;i<=n;i++)cin>>h[i]; memset(dp,0x3f,sizeof(dp)); dp[1]=0; for(inti=1;i<......
  • 2023互联网笔试记录汇总(61道真题+题解)
    以下编程题均为博主在2023年投递实习和秋招过程中的笔试真题(共61道编程题),为避免不必要的麻烦,不对题目的来源进行说明。3.4第一题题意:给一个数组(n≤2e5),求数组内任意数对的最大差值。即对任意i<j,求最大的x[j]-x[i]。题解:处理一下前缀最小值。第二题题意:给一个数组(n≤2e5......