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\)需要特判。

代码

posted @ 2016-09-10 23:17  mcginn  阅读(763)  评论(0编辑  收藏  举报