ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Trick小计

2022-03-01 21:02:55  阅读:162  来源: 互联网

标签:题目 询问 小计 Trick 给定 颜色 节点 解法


数论

筛法

  1. 埃氏筛复杂度 $O(nloglogn)$。奇快无比。

容斥原理

  1. minmax容斥同时适用于期望。
    2. 容斥原理的逆向使用,将容斥形式的式子转化为判断属性的式子
    3. 如果大力讨论的难度较小。可以试试容斥。

思路技巧

  1. 不行就随机化。

数据结构

区间数颜色问题

题目1:

给定长度为 $n$ 的序列,每个点有颜色 $c_i$ ,有 $q$ 次询问,询问区间 $[l_i,r_i]$ 的不同颜色数。

解法1:

莫队 $O(q\sqrt{n})$
#### 解法2:
定义序列 $b$ , $b_i$ 表示值与 $c_i$ 相同的前驱位置。
于是实际上询问区间内有多少个 $b_i\leq l_i$ 。
转化为二维数点问题即可。
根据题目要求选择数据结构。在线则可持久化。

题目2 : 给定长度为 $n$ 的序列,每个点有颜色 $c_i$ ,有 $q$ 次询问,询问区间 $[l_i,r_i]$ 的不同颜色数。带修。

解法1:

莫队 $O(qn^{\frac{3}{2}})$

解法2(离线):

同问题一解法二。此时点改为 $(i,b_i,t_i)$。三维数点问题,离线算法套数据结构即可

解法3 (在线):

此时同问题1解法2,维护二维点对。需要数据结构,支持在线加点,在线删点,区间统计。
稀疏二维线段树,$O(nlog^2n)$

题目3:

给定一个 $n$ 个节点的树,每个点有个颜色,求每个点的子树有多少不同颜色

解法1:

把树扒成序列,然后乱搞 $O(nlogn)$

解法2:

DSU on tree。$O(nlogn)$

题目4:

给定一个 $n$ 个节点的树,每个点有颜色。询问 $u,v$ 路径上有多少种颜色,带修。

解法1:

树上莫队,记得特判起点和lca

解法2:

边分治,太暴力了不解释。

题目5:

给定一个 $n$ 个节点的树,每个点有颜色。询问 $u$ 子树种与 $u$ 距离不超过 $d$ 的点的颜色数。

解法:

我太弱了,只会离线。
对于每个节点维护一颗线段树,记录子树内每个颜色出现的最浅深度。
再对全局开一颗树状数组,下标为深度,权值为种类数
当进入某节点时,查询该节点所有询问,即子树外对答案的影响
当即将离开某节点时,再次查询,将本次查询值减去上次查询值即为ans
至于线段树,线段树合并即可

题目6:

给定一个长度 $n$ 的序列和定值 $k$。定义 $f$ 为该序列覆盖了颜色 $[1,k]$ 的子区间数量。有两种操作,将某点修改为0,或询问此时 $f$ 值

解法:

定义 $R$ 序列,$R_i$ 表示满足条件的最左坐标,且 $R_i>i$。
显然该函数为递增函数,可以线性预处理。
则有 $f=\sum(n-R_i+1)$
考虑修改。定义与 $a_i$ 相同颜色的前驱后继为 $pre_i,suc_i$。
删除某点的操作为对 $R\in[pre_i,i]$ 进行 chkmax $suc_i$
SegBeat(无脑大复杂度)!或者线段树二分。

题目7:

给定 $n\times m$ 的矩阵。某 $k$ 个点被着色了,求所有包含了所有颜色的子矩阵个数。$(1\leq n,m \leq 10^9,1\leq k \leq 2000)$

解法

二维问题。不会。
只能扫描线扫掉两维。然后统计答案。
考虑枚举上下边界,我们可以 $O(k)$ 统计答案。
假定现在上下边界已经确定。考虑设函数 $R(x)$ 表示以 $x$ 为左端点时,最近的右端点。$Ans=\sum(n-R_i+1)$
可随着上下两端的移动,答案的变化量很大,没什么单调性。看起来只能 $O(k^3)$?
考虑回滚思想,让下端点单调上移。此时问题变成题目6的删点问题。
时间复杂度 $O(k^2logk)$

图论

  1. 答案是寄
    2. tarjan,每一个强连通分量的编号就是它的拓扑逆序

谔谔!

  1. 解的唯一性 : 令 $a,b$ 均为解,由一系列变化得 $a=b$。而不用证明充分性和必要性。
    2. 贪心和拟阵。

标签:题目,询问,小计,Trick,给定,颜色,节点,解法
来源: https://www.cnblogs.com/shouhuzuihaodebilibili/p/15952484.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有