2016 ACM/ICPC Asia Regional Dalian Online
2016 ACM/ICPC Asia Regional Dalian Online
1002.Different GCD Subarray Query
题意
- 给一个长为\(N(N \le 10^5)\)的序列\(a_i(a_i \le 10^6)\)。
- 有\(Q(Q \le 10^5)\)次询问,每次求区间\([L,R]\)中所有子序列的gcd种类。
思路
- 固定某个子序列的某个端点,那么不同的gcd值最多有\(\log{a_i}\)种。
- 离线处理所有询问,按右端点\(R\)从小到大排序,记录gcd最右位置,用线段树或树状数组维护区间和。
1007.Friends and Enemies
题意
- 有\(M\)个人,\(N\)种颜色的石头,其中\(M,N \lt 2^{31}\)。
- 每个人有一串由若干种石头构成的项链,可以没项链,即石头集合为空。
- \(M\)个人要么是朋友关系,要么敌人关系。
- 朋友关系:两人的项链至少有一种颜色相同;
- 敌人关系:两个人没有相同颜色的石头。
- 判断对于所有可能的关系,\(N\)种颜色是否都能满足这些上述条件。
思路
- 需要的颜色种数尽可能多,即图上边尽可能多,又不能出现三元环。
- 手写小数据,发现二分图连边貌似是最多的(不会证明XD)。
1008.Function
题意
- 给长为\(N(N \le 10^5)\)序列\(A_i\)。
- \(Q(Q \le 10^5)\)次询问,每次求\(F(l, r), 其中\)\(F(l, r)\)表示\(A_l\%A_{l+1}\%...\%A_r\)的值。
思路
- 若\(a \ge b\),则\(a \% b \le \frac a 2\)。
- 每次二分往右找第一个小于等于当前余数的位置取模。
1009.Sparse Graph
题意
- 在补图中求单源最短路
思路
- 对于当前点来说,补图中有连边的点是一些区间,那么每次转移都是一段区间的转移,用一个set维护未扩展的点。
代码
1010.Weak Pair
题意
- 给一棵\(N(N \le 10^5)\)个点的有根树,每个点有权值\(a_i\)。
- 求\((u, v)\)的对数,满足\(u\)是\(v\)的祖先且\(a_u \times a_v \le k\)。
思路
- 对于每棵子树\(u\),与\(u\)配对的对数相当于在dfs序区间中权值小于等于\(\frac k{a_u}\)的个数。
- 那么按权值从小到大将点插入线段树(维护已出现的点个数),同时询问也按查询值从小到大排序,就边插入边查询。
- \(a_i=0\)需要特判。
代码