传送门 最小值最大考虑二分答案,不难发现当最小值\(mid\)确定之后,原点到所有直线的距离一定都是\(mid\)时才是最优的,也就是说这些直线一定都是\(x^2+y^2=mid^2\)的切线. 接下来考虑一个点会被哪些切线所保护.作出这个点到圆的公切线,得到两个切点,那么在这两个切点之间的优弧上选择一个点,以它为切点的切线就可以保护当前点.也就是说能够保护一个点的切线的切点在圆上表现为一段角度的区间.可以用解析几何计算出这个角度的区间. 接下来需要在\([-\pi , \pi]\)上选择不超过…
BZOJ_2006_[NOI2010]超级钢琴_贪心+堆+ST表 Description 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的 音乐. 这架超级钢琴可以弹奏出n个音符,编号为1至n.第i个音符的美妙度为Ai,其中Ai可正可负. 一个“超级 和弦”由若干个编号连续的音符组成,包含的音符个数不少于L且不多于R.我们定义超级和弦的美妙度为其包含的 所有音符的美妙度之和.两个超级和弦被认为是相同的,当且仅当这两个超级和弦所包含的音符集合…
正题 题目链接:https://www.luogu.com.cn/problem/P7599 题目大意 \(n\)棵树,在某棵树上时可以选择向左右两边第一棵比它高的树跳,现在\(q\)次询问从\([A,B]\)中某个点出发跳到\([C,D]\)中某个点的最少次数. \(1\leq n\leq 2\times 10^5\) 解题思路 考虑到主要的阈值\([B+1,C-1]\)中的最大值,一旦超过了这个值就只需要考虑是否大于\([C,D]\)中的最大值就好了. 那么我们考虑如何选取起点,首先我们显然…
命题描述 给定一个长度为 \(n\) 的序列,\(m\) 次询问区间最大值 分析 上面的问题肯定可以暴力对吧. 但暴力肯定不是最优对吧,所以我们直接就不考虑了... 于是引入:倍增 首先,倍增是个什么东西? 在这里转一篇写的超棒的blog,点我.要是这都没看懂你就连小白兔都不如我就无语了. 总的来说,其实就是倒着运用二分的思想,从需求小的慢慢倍增把答案更新到需求大的 ST表就是一种常见的倍增思想的运用 关于ST表 ST表和树状数组,线段树这两种算法一样,是一种用于解决 \(RMQ(Range M…
题目链接 题目大意:求序列内长度在$[L,R]$范围内前$k$大子序列之和. ---------------------- 考略每个左端点$i$,合法的区间右端点在$[i+L,i+R]$内. 不妨暴力枚举所有左端点,找到以其为左端点满足条件的最大子序列. 用贪心的思想,这些序列一定是满足题意的.统计后将该序列删除. 但这样直接删除肯定会丢失一部分有用的序列.一些也在前$k$大范围内的序列可能跟删除部分有交集. 所以我们不妨设$maxi$指以$i$为左端点的子序列,以$maxi$为右端点时能取得最…
[HAOI2007]理想的正方形 题目描述 有一个\(a*b\)的整数组成的矩阵,现请你从中找出一个\(n*n\)的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: 第一行为3个整数,分别表示\(a,b,n\)的值 第二行至第\(a+1\)行每行为\(b\)个非负整数,表示矩阵中相应位置上的数.每行相邻两数之间用一空格分隔. 输出格式: 仅一个整数,为\(a*b\)矩阵中所有\(n*n\)正方形区域中的最大整数和最小整数的差值"的最小值. 输入输出样例 输入样例…
题解 二分时间 然后一个显然的事是一个军队向上爬的越高它控制的点越多 所以首先军队尽量往上爬. 当一个军队可以爬到根节点我们记录下它的剩余时间T和它到达根结点时经过的根节点的子节点son. 当一个军队爬不到根节点时我们就让它控制它可以爬到的最高点. 然后我们把爬到根节点的军队按T从小到大排序. 然后按顺序处理 然后假如一个军队没有时间回到它的son,且son还没有控制.就让它控制son. 因为让别的军队去控制它显然更浪费时间. 否则贪心地匹配就好了(尽量小的和小的和匹配) 然后向上爬用倍增来优化…
把三个串加上ASCII大于z的分隔符连起来,然后求SA 显然每个相同子串都是一个后缀的前缀,所以枚举s1的每个后缀的最长和s2相同的前缀串(直接在排序后的数组里挨个找,最近的两个分别属于s1和s2的后缀的height一定是最长符合要求的前缀),然后判断一下这个子串里最早出现的和s3相同的子串的位置,这里先预处理出每个等于s3的子串的位置然后二分找(没有就直接和height取max),然后答案就是从这个后缀开头到和s3相同子串结尾的前一个位置的长度 #include<iostream> #inc…
#include<iostream> #include<cmath> using namespace std; ; int a[maxn]; ]; ]; int quick(int a,int n) { ; while(n) { ) ans*=a; a=a*a; n>>; } return ans; } int main() { int n,m; cin>>n>>m; ;i<=n;i++) cin>>a[i]; ;i--) {…
Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 52328   Accepted: 24551 Case Time Limit: 2000MS Description For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same order. One day Farmer Joh…