首页 > 其他分享 >YNOI 做题记

YNOI 做题记

时间:2023-09-14 22:00:10浏览次数:58  
标签:pre 洛谷 所以 YNOI sqrt 修改 题记 维护

YNOI 做题记

偶然有一天做到了其中的一道题,于是便开始做相关的题了……

[Ynoi2015] 我回来了 - 洛谷

这之一场联考搬过来的题……于是考场上写了一个 \(O((n + m)\log^2 n)\) 的代码,然后成功被卡掉,非常慢速。

其实离线,将每一个伤害答案变化的时间做出来,然后加入时间序列后,树状数组维护即可。

其实发现如果询问很多,但是序列没有询问长,很可能考虑离线。

[Ynoi2010] y-fast trie - 洛谷

\(\mathrm{FaKe}\) y-fast trie……

其实有很 naive 的想法就是维护单向的最优。但是很明显,一次修改可能影响到 \(O(n)\) 个关系,所以单向显然是不好的。

其实维护双向最优,因为单向的一定不是最优的,所以完全可以缩减答案候选范围。于是一次修改最多影响到 \(O(1)\) 个关系,显然很优秀,所以小小的用 set 维护即可。

只是很难写,真的可以直接维护边吗?

显然很麻烦,所以需要每次动态的查询双向关系。

[Ynoi2016] 镜中的昆虫 - 洛谷

区间赋值,区间数颜色?\(\mathrm{ODT}\) 的复杂度真的很对!

先有单点修改,区间数颜色,依据套路,维护 \(pre\) 即可,发现每次修改会影响 \(O(1)\) 个 \(pre\),所以分块维护 \(pre\) 即可。

但是区间?对于信息的重复修改显然是不优的,所以有结论区间赋值对于 \(pre\) 的影响是 \(O(n + m)\) 的。

因为区间中的 \(pre\) 显然有 \(pre_i = i - 1\)。所以会影响到的其实只有颜色段的两端。

由于每次至多增加 \(4\) 个端点(认为 \(O(1)\)),原本有 \(O(n)\) 个端点,所以最多会影响到 \(O(n + m)\) 个端点,也就是影响 \(O(n + m)\) 次 \(pre_i\)。

但是,\(\mathrm{ODT}\) 之所以不用合并相同的节点,其实在于是随机数据,还有也就是本题的 \(O(n + m)\) 的性质吧。

然后 \(Luogu ~ \mathrm {RK4~?}\)

[Ynoi2016] 掉进兔子洞 - 洛谷

好厉害的想法!

每一个区间出现了那些数是好记的,但是合起来就不知道出现的多少次了。

离散化怎么离散化呢?可以记第 \(k\) 个出现的 \(x\) 为 \(x + k - 1\)。于是就可以了?

所以没有 unique 的离散化和 bitset 套莫队!

inline void add(int x) {
	cur[x + ++cnt[x] - 1] = true;
}

inline void del(int x) {
	cur[x + --cnt[x]] = false;
}

但是为了规避出现 \(l > r\) 的情况,在莫队转移的时候需要先向外扩展,再向内缩。

while (r < q.r) add(a[++r]);
while (l > q.l) add(a[--l]);
while (r > q.r) del(a[r--]);
while (l < q.l) del(a[l++]);

这是必要的(否则在 adddel 中需要特判 \(> 0\),但是这会很慢)。

所以说 bitset 套莫队这个套路还是十分套路的(废话)

[Ynoi2007] rcn / [Ynoi2003] 博丽灵梦 - 洛谷

这道题没了……在 \(Luogu\) 上看不了,\(LibreOJ\) 上也没有。

题意是有 \(n\) 个点,坐标为 \((i, p_i)\),其类型为 \(c_i \in [1, n]\),每一个类型有一个权值 \(w_i\)。

其中 \(p\) 是一个排列,多次询问求矩形中所有存在类型的权值之和。

这,上二维数颜色了啊……可是排列!发现如果莫队移动每一次就只会修改一个点,也就是说只会影响 \(O(1)\) 个 \(pre\),所以可以分块维护 \(pre\),但是需要 \(O(1)\) 修改,\(O(\sqrt n)\) 查询。

发现加入不好维护,所以利用不增莫队,只是删除。

问题在于分块如何 \(O(1)\) 修改,\(O(\sqrt n)\) 查询。这本质上是一个二维数点问题,所以可以二维分块,可以参考 [Ynoi2007] rdiq - 洛谷,属于是二维分块板板了(可是二离常数更小!)

还是太弱了,只会 \(O(\sqrt n)\) 修改,以及 \(O(\sqrt n \log n)\) 查询,如果是这样,套莫队就变成了 \(O(n \sqrt n \times \sqrt n + m \sqrt n \log n)\),这复杂度看着都抽象 QwQ

其实本题好像就是 [Ynoi2003] 博丽灵梦 - 洛谷,问题不大,慢慢做吧这。

标签:pre,洛谷,所以,YNOI,sqrt,修改,题记,维护
From: https://www.cnblogs.com/jeefy/p/17703606.html

相关文章

  • windows环境下tomcat配置一些问题记录
    首先我们需要提前在电脑上安装jdk官网如下:JavaArchiveDownloads-JavaSE11|Oracle中国这里我安装的是jdk11 接着下载好tomcat安装包官网如下:ApacheTomcat®-Welcome!我下载的是9.0版本 复制安装路径配置环境变量对path进行修改 tomcat安装成功之后......
  • [刷题记录Day 23]Leetcode二叉树
    No.1题目修剪二叉搜索树思路递归法有点抽象,要对具体案例做模拟才好懂递归分析返回值:节点,参数:节点,[下界,上界]终止条件:遇到空节点,返回空单层递归逻辑:判断不在范围内的情况:当前节点小于下界/大于上界,直接返回右/左子树递归结果;若在范围内,则递归筛查左右子树,返回当前节点......
  • 九月做题记录(距 CSP 还有 1 个月)
    P3959[NOIP2017提高组]宝藏发现\(n\)是很小的,考虑状压。我们先记录下当前的树包含了哪些节点,然后因为转移时肯定会需要经过了多少边,也就是树的深度。我们记录\(\text{expand(i)}\)表示当前选的集合为\(i\)时,扩展一次后的集合。\(\text{road(i,j)}\)表示选的集合为......
  • 代码随想录刷题记录——栈与队列篇
    栈与队列理论基础 栈stack:先进后厨队列queue:先进先出STL(C++标准库)STL栈和队列属于容器适配器(containeradapter)优先队列priority_queue:默认大根堆,如果是pair<a,b>,默认比较a大小如果需要比较b大小,且小根堆,可以如下实现232.用栈实现队列题目链接 pop操作时,当......
  • 代码随想录刷题记录——双指针篇
    27.移除元素题目链接快慢指针,最终返回index值为移除元素后的数组末尾元素下标+1.#include<vector>usingnamespacestd;classSolution{public:intremoveElement(vector<int>&nums,intval){//快慢指针intnums_length=nums.size();......
  • 【问题记录】ApplicationContextAware 注入为空的问题
    1  前言今天在关于流程的群里发现有人问这个问题,简单来记录下哈,也就是Aware注入的时候为什么会为空呢?有的人说static的应该类名.进行等于,也有人说是类上的注解应该是@Component不应该是@Service,那我们来看看。2 剖析首先关于注解的@Service在这里可以理解为跟@C......
  • 关于sql语句进行删除时不能使用简称的问题记录
    1、问题:在代码中使用到了sql删除的功能,最简单的删除sql:deletefrompeoplepwherep.id=1;但是出现了问题,提示我无法删除,报错为:YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear......
  • vite + vue3 自动导入点击路由刷新问题记录
     exportdefaultdefineConfig(()=>{//这里只加入了element的有其他的也加在这里constoptimizeDepsElementPlusIncludes=['element-plus/es'];//预加载element样式有其他组件也是如此设置即可fs.readdirSync('node_modules/element-plus/es/components').......
  • 问题记录
    一.localhost与127.0.0.1的ip+端口可以访问项目但本机ip不可以1.排查顺序确认本机端口开放windowsnetstat连接/**netstat-aon将显示当前正在运行的网络连接和端口号netstat-na*/netstat-aon|find"1024"netstat-ano-ptcp|find"9943"Linuxlsof命令lsof-i:6379//......
  • 【Leetcode刷题记录】1、统计参与通信的服务器;2、统计二叉树中好节点的数目;3、从两个
    1、统计参与通信的服务器题目:这里有一幅服务器分布图,服务器的位置标识在 m*n 的整数矩阵网格 grid 中,1表示单元格上有服务器,0表示没有。如果两台服务器位于同一行或者同一列,我们就认为它们之间可以进行通信。请你统计并返回能够与至少一台其他服务器进行通信的服务器的......