10 05 总结

T1

有 n个正整数 a[i],设它们乘积为 p,你可以给 p乘上一个正整数 q,使 p*q刚好为正
整数m的阶乘,求m的最小值。

分析: 

题目要求一个最小的m使m!包含 p这个因子。 
可以把p分解质因数,假设 p=∏ai^bi(ai为质数),那么只要 m!包含了每个ai^bi,m!就包含p。 
所以对于每个ai^bi,分别求出满足条件的最小的 m,取最大值即可。 
关于m使用所有数的分解出来的质因数个数来判断,二分即可。

T2

给出一个长度为 m 的上升序列 A(1 ≤ A[i]≤ n), 请你求出有多少种 1...n 的排列, 满足 
A 是它的一个 LIS. 

数据范围特别小,考虑搜索,无法剪枝。考虑状态压缩。

最长不降子序列的一种求法是:使用附加数组D[i],表示当前长度为 i的最长不降子序列最小的结尾是
多少,显然它是单调递增的。每插入一个数就二分找到第一个大于它的位置替换。 
我们可以设状态S1,第i位为 1表示它在D 中出现了,出现的位置就是1~i位1 的数量 
现在就可以设递推状态f(S,S1)表示当前用了S中的数,D的状态为S1的方案数 
转移很容易转移,枚举这一位选什么直接更新  
注意到S1一定是S的子集,于是可以用三进制表示。

T3

    豪哥生活在一个 n 个点的树形城市里面,每一天都要走来走去。虽然走的是比较的
多,但是豪哥在这个城市里面的朋友并不是很多。 
   当某一天,猴哥给他展现了一下大佬风范之后,豪哥决定要获得一些交往机会来提升交
往能力。豪哥现在已经物色上了一条友,打算和它(豪哥并不让吃瓜群众知道性别)交
往。豪哥现在 spy 了一下这个人的所有行程起点和终点,豪哥打算从终点开始走到起点与
其相遇。但是豪哥是想找话题的,他想知道以前有多少次行程和此次行程是有交集的,这
样豪哥就可以搭上话了。这个路径与之前路径的有交集数量作为豪哥此次的交往机会。 
   但是豪哥急着要做交往准备,所以算什么交往机会的小事情就交给你了。 

分析:

首先使用树链剖分,但被卡常了。有一种方法:

让我们来看看树上路径交可以怎么表示。画几棵树后可以发现:  
令lca(a,b)=g,lca(c,d)=d。若树上路径[a,b],[c,d]有交集,则g在cd上  或  d在ab上。 令lca(a,b)=g,lca(c,d)=d。
若树上路径[a,b],[c,d]有交集,则 g在cd上  或  d在ab 上。 
这个结论并不是那么好发现,可以粗略的感性理解一下:  
假设我们现在手上是一条 lca 深度大的路径,这条路径最高可达点就是 lca,若 lca 不在另一条路径上,
又因为他lca深度大,所以不可能在另外一条路径 lca上方,所以就没有可达点了。

所以我们使用dfs序

静态树考虑dfs序。  (动态树考虑欧拉序)  
对于一个点x,a->lca(a,b)这样的树链如果经过他,则一定是从它的子树走向它的祖先。
然后就比较显然了,每多加一个这样的x,则给他子树中所有点的权值都+1.  
查询(a,lca(a,b),b)的时候,就用 a权+b权-lca权*2.  
若 a与lca在x的上下两方,则会被累加到贡献。  

同样地考虑dfs序,  
很方便的树上前缀和。若有一条路径(a,b),则给lca(a,b) +1,a-1,b-1.然后查询一个点到根的权值和,这
是离线时的套路。 
但这题这样不好做,因为不能每一次都重构树,于是我们变一下,变成类似树上后缀和的东西。  
 
对于一条路径(a,b),给a+1,b+1,lca-2. 一个点的子树权值和就是他的权值。 
 
用两树状数组维护一下dfs 序上的信息,我们就把这道题给搞定了。  
这题的坑点主要在于,两个树状数组维护的信息意义是不一样的,压根不可以相提并论。 
 

总结:
写代码一定要分段。利用特殊数据来骗分。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值