T1
转化为 \((b_i,a_i)\) 与 \((b_j,a_j)\) 之间的斜率。
发现性质(省略),只需要计算相邻两个点之间的答案即可,用 set 就行了。
T2
先找性质,发现即为 \(a,b,c\) 各有某一位是“独特”(即其他两个数这一位与之不一样)的。
直接 \(O(8^2n)\) 记录各个状态,预处理转移优化一下即可。
T3
首先需要找到询问时,该节点的生成时间。
_
/ \ _
_/ \_/ \
/
例如用 /
表示加点,\
表示上跳,那么只需要找到查询点之前第一个比它小的点,即为生成时间。
在询问序列上建立线段树,枚举原序列上的每个点,=。
线段树维护区间加,单点查,查区间小于某数的最后一个数。
这种离线方法第一次发现,感觉有很强的扩展性
计算完生成时间就可以再次离线,计算区间中某个点被加点了多少次即可。
T4
一眼题,题目还看错了,好似。
注意【第 \(i\) 次占据距离为 \(i\) 的点】与【每次沿边扩张】的区别,前者若相遇,会继续扩张,后者不会。
直接建 dfs 树,拿出返祖边,然后拿出这些端点建个虚树。
这样一来,每个【不在环上的点】的状态就只由【与之最近的环上的点】的状态决定,直接预处理。
然后枚举最终答案在哪个位置,然后枚举虚树上的 \(O(200)\) 条边,计算答案。
分类讨论共 9 类,左端点 >,<,= 以及右端点,细节很多。预处理虚树上点之间的最短距离(Floyd)
特殊处理【经过当前枚举位置的新边】。
最后,只需要将点的个数树上前缀和即可。
赛事冲 T4 没冲出来,可惜了。
标签:NOIP,04,题解,离线,zhengjun,枚举,即可 From: https://www.cnblogs.com/A-zjzj/p/17526057.html