首页 > 其他分享 >XYD 序列上的树

XYD 序列上的树

时间:2024-08-02 17:08:43浏览次数:8  
标签:nxt 那么 位置 合法 XYD 端点 序列 我们

毒瘤题

统计区间个数。很多都是扫描线。通常有两种常用的方法。一种是枚举右端点,然后求有多少左端点。一种是枚举左端点,求有多少右端点。第二种是完全劣于第一种的。因为我们可以在扫描线扫过去的时候,记录一些答案,为我们在求左端点的时候提供一些便利。

所以我们从右往左做,然后找有多少右端点。假设我们现在做到了i那么我们的右端点一定是右边满足a[j]==a[i]的某一个。那么我们要找最远的右端点,那么包在右端点里的j都合法。我们发现我们可以利用之前的答案然后只要判断i-nxt[a[i]]对答案的贡献即可。首先我们发现如果一个数出现了1次,那么它必然就是叶子,然后叶子肯定是从上往下走的,然后在走上去。所以叶子的左右是相同的。然后对于一个数,它第一次出现的位置肯定是第一次进入子树的位置,最后一次出现的位置是跳出子树的位置,那么第一次出现的和最后一次出现的两边必然是相同的。这就是判定的方法。我们发现在递归的过程中,有许多小的段也是合法的。就比如单个的,包了第一层的,比如就是1 * 1 * 1其中是合法的欧拉序,那么1 * 1也是 1 * 1 1也是,这个可以通过乘法原理解决。所以我们对于每个数,都找到第一次和最后一次出现的位置,1212.然后对于一段合法的欧拉序,比如1111,那么*也是合法的。所以我们首先要找到最远右端点使得里面数都不重复。这不是个很经典的的东西吗。就是有道主席树的题也用到了这个东西。我们将每个数的nxt[a[i]]也就是a[i]出现的下一个位置,那么我们要找到一个最大的r使得里面的nxt[a[i]]>=r。我们建立一颗线段树,对于区间里nxt[a[i]]>nxt[l]的数去取个min。但我们发现这样根本做不了(xuzishuai场上就想到这里了orz)。我们在维护一个lst,刚好和nxt相反,那么我们只要找到最小的j使得lst[j]<nxt[l]即可。这个可以线段树上二分做。

标签:nxt,那么,位置,合法,XYD,端点,序列,我们
From: https://www.cnblogs.com/wuhupai/p/18339127

相关文章

  • 反序列化靶机serial
    1.安装靶场进行配置2.打开kali扫描IPnmap-PS-T4192.168.245.0/243.物理机访问靶场4.F12查看网络,刷新一下得到一串base64编码5.进行base64解码,乱码为空格改为\x00,再次进行base64加密,得到payload如下Tzo0OiJVc2VyIjoyOntzOjEwOiIAVXNlcgBuYW1lIjtzOjM6InNrNCI7czo5O......
  • 反序列化漏洞vulhub靶场serial
    环境搭建下载https://download.vulnhub.com/serial/serial.zip解压出来就是这种 你会得到一个这样的文件,这里使用VMware新建一个虚拟机,这里记录比较重要的几部分。这里就是使用我们刚才下过来的。  漏洞过程详解1.信息收集打开靶机,在kali虚拟机中进行主机......
  • 15. 序列化模块json和pickle、os模块
    1.序列化模块 1.1序列化与反序列化(1)序列化将原本的python数据类型字典、列表、元组转换成json格式字符串的过程就叫序列化(2)反序列化将json格式字符串转换成python数据类型字典、列表、元组的过程就叫反序列化(3)为什么要序列化计算机文件中没有字典这种数据类型,将字典中......
  • 时间序列分析——指数平滑和ARIMA模型
    个人学习笔记,课程为数学建模清风付费课程目录一、时间序列分析1.1时间序列数据1.2时间序列的基本概念1.3区分时期和时点时间序列1.4时间序列分解1.4.1长期趋势:T1.4.2季节趋势:S1.4.3循环变动:C1.4.4不规则变动:I1.5叠加模型和乘积模型1.6Spss处理时间序列中的缺失值1......
  • Modelsim仿真实现Verilog HDL序列检测器
    检测接收到的数字序列中出现“10011”的次数。例如输入序列为40位:1100_1001_1100_1001_0100_1100_1011_0010_1100_1011从最高位开始检测,出现了2次:1100_1001_1100_1001_0100_1100_1011_0010_1100_1011所以,序列检测器的计数结果应该是2。状态机如下:当前状态current_stat......
  • 代码审计: ThinkPHP V6.0.12LTS反序列化漏洞复现
    这里写目录标题源码下载一、前缀知识事件回调:二、代码审计查找反序列化路由三、利用链分析构造exp源码下载在我的个人免费资源里面一、前缀知识事件回调:概念:在某个特定事件发生时,系统会调用预先定义好的函数(即回调函数)来处理该事件。回调函数通常作为参数传递给......
  • 三种语言实现双指针判断子序列(C++/Python/Java)
    题目给定一个长度为n的整数序列a1,a2,…,an以及一个长度为m的整数序列b1,b2,…,bm。请你判断a序列是否为b序列的子序列。子序列指序列的一部分项按原有次序排列而得的序列,例如序列{a1,a3,a5}是序列{a1,a2,a3,a4,a5}的一个子序列。输入格式第一行包含两个整数......
  • 2.Request,Response和序列化类
    【一】不同编码格式的http请求django视图类或视图函数的request#只针对post请求的urlencoded编码格式才有数据(<QueryDict:{"a":"a"}>)request.POST#请求地址框中获得数据(<QueryDict:{"a":["a"]}>)request.GET #只取一个request.GET.get('key')......
  • 时间序列分析和集成学习
    时间序列分析(TimeSeriesAnalysis)原理时间序列分析是一种针对时间序列数据的统计和预测方法。时间序列数据是按照时间顺序排列的一组观测值,其分析方法主要包括识别数据模式(如趋势、季节性、周期性等)、构建预测模型和进行未来数据的预测。常用的时间序列模型有自回归移动平均......
  • 为什么 functools.cache 装饰器不能在我的带有记忆功能的斐波那契序列函数上工作?
    我在python中搞乱了记忆,并使用了一个示例斐波那契序列函数作为模型。我将第一个fibonacci()函数编写为常规函数,无需记忆,它按预期工作。接下来,我编写了我的fibonacci_memo()函数,该函数使用带有输出的输入字典来利用记忆化,并且按预期工作。然后我想测试functo......