废话
the last day~
明天早上就回中山了。
正题
T1
【题目大意】
找出树上的一个点,使它到最远的点的距离尽可能小,输出它离最远的点的距离。
【样例输入】
3 2
1 2
2 3
【样例输出】
1
【数据规模】
1 ≤ n ≤ 1 0 5 1 \leq n \leq 10^5 1≤n≤105
【题解】
⌈ 树 的 直 径 2 ⌉ \lceil\frac {树的直径} 2\rceil ⌈2树的直径⌉
证明懒得写了。
T2
【题目大意】
给出n根木棒,第i根木棒的长度为 a i a_i ai,m次询问,每次询问 [ l , r ] [l,r] [l,r]区间内能组成的最大的三角形的周长是多少。若不能组合出三角形,输出-1。
【样例输入】
5 3
1 2 3 4 5
1 3
1 4
2 5
【样例输出】
-1
9
12
【数据规模】
1
≤
n
≤
1
0
5
1 \leq n \leq 10^5
1≤n≤105
1
≤
m
≤
1
0
6
1 \leq m \leq 10^6
1≤m≤106
1
≤
a
i
≤
1
0
9
1 \leq a_i \leq 10^9
1≤ai≤109
【题解】
很容易发现一个性质,假如将 [ l , r ] [l,r] [l,r]区间内的木棒排序,组成周长最大的那个三角形的三根木棒的位置一定是连续的。
于是我就千辛万苦地造了个莫队+splay,可惜时间复杂度不够优秀—— O ( n × n × l o g ( n ) × 玄 学 常 数 ( 4 , 5 左 右 吧 ) ) O(n \times \sqrt n \times log(n) \times 玄学常数(4,5左右吧)) O(n×n×log(n)×玄学常数(4,5左右吧))。
正解还要用到一个性质:将序列排序后,取前49大的木棒一定可以组成三角形,因为木棒的极限情况是 1 , 1 , 2 , 3 , 5 , 8 , 13 , … 1,1,2,3,5,8,13,\dots 1,1,2,3,5,8,13,…也就是斐波那契数列,而第49根木棒就远超 1 0 9 10^9 109了,所以肯定可以组成三角形,于是用主席树维护一下,然后每次暴力取出前49大的木棒用第一个性质暴力过一遍即可。
时间复杂度 O ( n l o g n + m l o g n + 49 m ) O(nlogn+mlogn+49m) O(nlogn+mlogn+49m)。
T3
【题目大意】
给你一个长度为 n n n的 01 01 01串和 m m m次询问,第 i i i次询问会给你 l i l_i li和 r i r_i ri,你需要输出以 l i l_i li到 r i r_i ri结尾的前缀中两两的最长公共后缀的最大值。
【样例输入】
4 2
0101
1 3
2 4
【样例输出】
1
2
【数据规模】
0 ≤ n , m ≤ 1 0 5 0 \leq n,m \leq 10^5 0≤n,m≤105
【题解】
题解用的算法我并不会,贴个题解在这就算了。
六天过去,发现咕了好多博客,发现还有无穷无尽的算法要学。
我果然是个蒟蒻。
肝算法吧。