![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分治
crazy morning
去西之西处,驾驭长风
展开
-
P7837 「Wdoi-3」夜雀 cooking
题目题目思路看见交互一般有2个结论:1.二分2.分块很好,这题综合了2个结论……由于完全随机,所以把n个人分出nmn\over mmn个块,每个块期望有1个人特殊。接下来需要发现性质:如有:al+al+1>ara_l+a_{l+1}>a_ral+al+1>ar,我们可以通过查询区间蓝色和来确认是否只有一个紫,而不是就可以对区间二分递归。al+al+1>ara_l+a_{l+1}>a_ral+al+1>ar这个条件显然在除第1块外都成立。所原创 2021-08-23 21:00:14 · 109 阅读 · 0 评论 -
P1890 gcd区间
题目题目思路可暴力,可st表。st表code:#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>using namespace std;int gcd(int x,int y){ int r=x%y; while (r) x=y,y=r,r=x%y; return y;}int n,m,st[5原创 2021-05-05 16:18:52 · 62 阅读 · 0 评论 -
P7167 [eJOI 2020 Day1] Fountain
题目题目思路首先一个单调栈求出每一个圆盘往下流到哪,以这个为边,做一个st表。code:#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>using namespace std;int n,q,stfa[100001][25],sthe[100001][25],x[100001],p[100001],tot,原创 2021-02-17 11:20:06 · 163 阅读 · 0 评论 -
P1081 [NOIP2012 提高组] 开车旅行
题目题目思路坑爹码量题,慎做就是预处理+倍增,剩下请理解代码/jkcode:#include<iostream>#include<cstdio>#include<algorithm>#include<string>#include<cstring>#include<cmath>#include<queue>#include<deque>using namespace std;stru原创 2021-04-07 19:40:55 · 109 阅读 · 0 评论 -
P1257 平面上的最接近点对&P1429 平面最近点对(加强版)
题目题目&题目思路利用二分思想,划分子问题,显然这一步非常简单。本题难点在于合并,显然左右2边的点可以合并,但是我们还需要在左右各选一个点合并,怎么办?暴力n方过百万,dp得零蛋以上纯属搞笑这里我们已经有了一个候选答案d(来自2个子问题),我们离选择的中心点最多不能超过d,显然如果超过一定不是更优的,使用这条性质可以筛走一部分数。同时我们发现,若2点的纵坐标>=d,也不会更优,这样再暴力两两匹配即可。code:#include<iostream>#includ原创 2021-04-03 09:34:15 · 89 阅读 · 0 评论 -
SSLOJ1271 排序I
Description输入n(<=100000),由小到大输出Inputnn个数Output由小到大输出Sample Input53 2 1 4 5Sample Output1 2 3 4 5思路明明是sort可以解决的事情,为啥要堆啊堆主要操作有交换,查询最值,删除某个值我们要让堆保持有序性,即父节点比所有其子节点都大/小所以我们需要用交换把堆弄成有序的,即排序。那么如何交换?先放一趟排序的代码:void f(long long x,long long n){原创 2021-03-19 19:58:49 · 79 阅读 · 0 评论 -
SSLOJ 1135 二分查找
Description有一组数据,按从小到大的顺序建立排序的数组。然后读入一数x,查找x是否在数组中,并输出查找结果。Input第一行为一个正整数n(n<=10000)第二行为n个整数a[i](-231<a[i]<231-1)第三行为要查找的数xOutput若找到,输出x的位置;若找不到,输出“No Found.”Sample Input51 3 5 7 93Sample Output2思路标题即做法,不解释code:#include<iostream>原创 2021-04-03 08:38:52 · 74 阅读 · 0 评论 -
SSLOJ 1498 飞船赛
Description有N艘飞船进行比赛,它们的跑道为直线并互相平行。每个飞船的起跑位置均不相同。第i个飞船从Xi处开始向右行驶(Xi各不相同)。比赛开始后,它能在零时间内加速到最大速度并永远保持此速度。假设这里的比赛没有终点。 你的任务是算出比赛过程中一共有多少次“超车”。Input输入文件数据格式如下:第一行为一个整数N(1≤N≤250000)。接下来的N行,每行两个整数Xi(0≤Xi≤10^6)和Vi(0<Vi<100),描述了一艘飞船的起跑位置和最大速度。给出的飞船信息按照起跑原创 2021-04-03 08:37:17 · 117 阅读 · 0 评论 -
SSLOJ 2323 逆序对
DescriptionPrince对他在这片大陆上维护的秩序感到满意,于是决定启程离开艾泽拉斯。在他动身之前,Prince决定赋予King_Bette最强大的能量以守护世界、保卫这里的平衡与和谐。在那个时代,平衡是个梦想。因为有很多奇异的物种拥有各种不稳定的能量,平衡瞬间即被打破。KB决定求助于你,帮助他完成这个梦想。一串数列即表示一个世界的状态。平衡是指这串数列以升序排列。而从一串无序数列到有序数列需要通过交换数列中的元素来实现。KB的能量只能交换相邻两个数字。他想知道他最少需要交换几次就能使数列有原创 2021-04-03 08:34:33 · 68 阅读 · 0 评论 -
SSLOJ 1421 求第K小数
Description于给定n个元素的数级a[1…n],要从中找出第k小的元素。Input第一行是总数n和k,第二行是n个待比较的数。Output第K小数的位置。Sample Input5 323 8 91 56 4Sample Output1思路结构体+快排思想的分治code:#include<iostream>#include<cstdio>#include<algorithm>#include<string>#incl原创 2021-04-03 08:32:35 · 59 阅读 · 0 评论 -
P1138 第k小整数
题目题目思路利用快速排序思想可以优化时间,见代码code:#include<iostream>#include<cstdio>#include<algorithm>#include<string>#include<cstring>#include<map> using namespace std;long long a[100001],id[100001];long long n,k;void f(long原创 2021-04-03 08:30:55 · 95 阅读 · 0 评论 -
P1024 [NOIP2001 提高组] 一元三次方程求解
题目题目思路显然可以用公式,也可以使用二分方法。**cI原创 2021-04-03 08:17:45 · 87 阅读 · 0 评论 -
P1258 小车问题
题目题目思路可以推公式,但二分不是更香吗?与公式差不多,我们二分小车卸下甲的点即可。code:#include<iostream>#include<cstdio>#include<cstring>using namespace std;double a,b,c,d;double x;double myd(double x){ double s=a*x*x*x+b*x*x+c*x+d; return s;}int main(){ cin原创 2021-04-03 08:14:50 · 84 阅读 · 0 评论 -
CF559B Equivalent Strings
题目题目思路注意到这里的等价具有传递性,我们可以求出字典序最小的2个等价串并判断是否相等。code:#include<iostream>#include<cstdio>#include<cmath>using namespace std;string x,y;string f(int l,int r){ if ((r-l+1)%2==1) { string u=""; for (;l<=r;l++) u+=x[l]; retur原创 2021-04-03 08:12:45 · 70 阅读 · 0 评论