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

7.23 做题记录

时间:2023-07-23 21:55:05浏览次数:62  
标签:总结 log 记录 sum 7.23 考虑 莫队 复杂度

P3897 [湖南集训] Crazy Rabbit

考虑一个点到圆的两个切点构成的圆弧,如果两个点连线与圆不交,那么两端圆弧是相交但不包含的,且把一段圆弧取反不影响答案。

断环成链,原问题等价于选最多的区间 \((l,r)\) 满足对于所有 \(i <j\),\(l_j < r_i\) 枚举起始区间做 LCS 即可,时间复杂度 \(O(n^2 \log n)\)。

总结:

  • 利用投影描述复杂信息

P5906 【模板】回滚莫队&不删除莫队

在普通莫队中增加是容易的,删除较为困难,考虑如何避免删除。

对于左端点所属块相同的询问,我们按右端点排序,先处理出右边的前缀信息,每次把 \(l\) 指针拉到左端点所属块的右端,暴力修改信息,这样每次询问只需要左移 \(l\),可以分析出复杂度为 \(O(q \log n)\)。

总结:

  • 花费一定的代价把问题转化为熟知的,可做的形式

P5986 [PA2019] Szprotki i szczupaki

首先每次必然会选择小于 \(x\) 最大的数,且每次操作后如果不能大于 \(k\) 或者大于 \(x\) 最小的数,就失败了。

使用线段树维护数集,每两次操作后的大小必然大于第一次选择的数的两倍,时间复杂度 \(O(n \log n \log V)\)。

总结:

  • 注意题目中自然的 \(\log\)

P4769 [NOI2018] 冒泡排序

通过一些简单的情况可以发现,排列中不存在长度 \(\geq 3\) 的下降子序列,由 Dilworth 引理这等价于可以划分成两个上升子序列。

记 \(f_{i, j}\) 为前 \(i\) 个的最大值为 \(j\) 后面 \(n - i\) 个位置的方案数,则:

\[ f_{i, j} = \sum_{k = j}^n f_{i + 1, k}\]

考虑其组合意义,即从点 \(A(i, j)\) 走到 \(B(n, n)\) 的不与直线 \(y = x - 1\) 相交的方案数。

不考虑后者,答案为 \(\dbinom{n-i-1}{2n - i - j - 1}\),考虑第一个相交的位置,经过直线的方案数即为从点 \((j + 1, i - 1)\) 出发到点 \((n, n)\) 的方案数,于是 \(f_{i,j} = \dbinom{n - i - 1}{2n - i - j - 1} - \dbinom{n - j - 2}{2n - i - j - 1}\)。

现在有字典序的限制,钦定一段前缀相同,可以得到最终答案为从 \((i,\max\limits_{j\leq i}q_j+1)\) 游走到 \(n,n\),而且不走到线以上的方案数,类似地可以求,时间复杂度 \(O(\sum n)\)。

总结:

  • 对于一个严格的限制(即不满足是容易的),一般其补集会有一个简单的判断,可以通过一些局部 / 边界情况来得到
  • 字典序比较钦定前缀

P5537 【XR-3】系统设计

考虑 \(rt \to x\) 路径唯一,记为 \(p_x\),考虑将 1 操作转化为由根节点开始,并将 \(p_x\) 接入 \(a_{[l, r]}\) 前,二分结束位置,问题变为查询一序列是否属于 \(p\)、在 \(p\) 中位置。
考虑哈希。利用线段树可将 2 操作变为线段树上单点修改区间,时间复杂度 \(O(n + m + q \log^2 m)\)

总结:

  • 利用 Hash 处理一一对应的序列匹配问题

CF1641D Two Arrays

注意到 \(m\) 的范围很小,这启发我们在复杂度上带上一些 \(2^m\) 状的东西。

先做双指针,现在要计算当前是否存在不交的数组对。

写出数组 \(X,Y\) 的幂集 \(P_x,P_y\),考察以下式子

\[\sum_{x\in P_x}\sum_{y\in P_y}[x=y](-1)^{|x|-1} \]

它在 \(P_x, P_y\) 有交集时为 \(0\),否则为 \(1\)。

使用 Hash 维护幂集,在双指针的过程中记录桶判断,时间复杂度 \(O(nm 2^m)\)。

总结:

  • 范围很小的集合相交问题,考察其幂集

标签:总结,log,记录,sum,7.23,考虑,莫队,复杂度
From: https://www.cnblogs.com/treap/p/17575980.html

相关文章

  • 查询docker的操作记录
    查询Docker的操作记录作为一名经验丰富的开发者,我将指导你如何查询Docker的操作记录。在这个过程中,我将提供步骤和相应的代码示例,以帮助你更好地理解。步骤概览以下是查询Docker的操作记录的步骤概览:步骤描述1安装Docker2配置Docker日志驱动3重启Docker守护......
  • 7.23
    #include<stdio.h>intmain(){inti;chars[20]="ILoveGPLT";#include<iostream>#include<set>#include<vector>usingnamespacestd;intans,ans1;intmain(){vector<int>vt,vt1;set<int>s......
  • 7.23日
    清晨五点三十就醒了,硬座真就硬坐呗,站着也难受,坐着也难受,但是看见车厢里还有许多无座的人,还是“享受”自己的座位吧。后面断断续续睡了几次,或因为刺眼的阳光,或是吵闹的闲谈声,又或是令人惊喜的大广播。好在八点四十就能到达西安站了,这是我硬坐下去的盼头。火车行驶在华山山腰,很难想......
  • 2023.7.23 周日:继承
    1//例:publicclassStudentsextendsPerson{}2//关键字extends3//在Java中所有的类都会直接或者间接继承object类4//在Java中只有单继承没有多继承5/////////////////////super6//main7publicclassMain{8publicstaticvoidmain(String[]args){......
  • Mit 6.824 学习记录
    MapReduce实验干嘛实现一个分布式的MapReduce,由两部分组成,master和worker。一个master,多个worker。在本机运行,worker和master用rpc通信。每个worker向master索要任务,从一个或多个文件读取任务的输入,执行任务,并将任务的输出写入一个或更多文件。如果超时(10s)将工作......
  • echarts记录篇(三 ):使用横向柱状图实现左侧分类对齐右侧显示数据效果及数据过多加滚动
    一、效果如下: 二、直接上代码上一篇已经说过左侧分类,右侧数据对齐的方法,如果需要移步上篇,此篇主要是纵向滚动条功能,代码如下:dataZoom:[{type:"slider",realtime:true,//拖动时,是否实时更新系列的视图startValue:0,endVal......
  • 7.23 校内 test
    T1题面:给一个由A,B组成的操作序列,A代表全部取反,B代表+1,每次给出操作区间l,r和一个01串,问经过操作序列中\([l,r]\)的操作后的01串,强制在线。观察性质,发现一次取反会使后面的所有+1变成-1,随便用前缀和维护即可。T2给一个网格图,每个格子有权值,切割一次的代价是被......
  • echarts记录篇(一):使用柱状图实现排名前边有排序数字
    一、效果如图: 二、直接上代码yAxis:{inverse:true,//如果数据数组倒置排序,加上此代码data:categories1,offset:0,axisLabel:{fontSize:18,color:"#5DB3DC",margin:130,//距离右侧图形距离,配合axisLabel.l......
  • echarts记录篇(二 ):使用横向柱状图实现左侧分类对齐右侧显示数据效果
    一、效果图如下: 二、直接上代码yAxis:[{//左侧name分类inverse:true,//如果数据数组倒置排序,加上此代码data:categories1,axisLabel:{fontSize:16,color:'#fff'},axisLine:{......
  • 7.23做题记录
    线段树没学会 ......