二分与三分
穷源溯流
路很长,尽管走便是。
展开
-
洛谷 P4602 [CTSC2018]混合果汁(主席树+二分)
const int N=1e5+5; int n,m,_; int i,j,k; //int a[N]; struct Node { int l,r; ll sum,p,v; }t[N<<5]; int root[N],tot=0; struct O { int p,l,d; bool operator<(O o){ ...原创 2021-04-03 19:20:42 · 278 阅读 · 0 评论 -
洛谷 P2468 [SDOI2010]粟粟的书架(主席树+二分)
//#pragma GCC optimize(2)//#include <bits/stdc++.h>#include <iostream>#include <cmath>#include <cstdio>#include <algorithm>#include <cstring>#include <queue>#include <vector>#include <...原创 2021-04-02 13:17:54 · 123 阅读 · 0 评论 -
洛谷 P6510 奶牛排队(单调栈+二分)
const int N=5e5+5; int n,m; int i,j,k; int a[N]; int smax[N],smin[N]; int maxx=0,minn=0;int main(){ while(~sd(n)){ forn(i,1,n) sd(a[i]); int ans=0; for(int i=1;i<=n;i++){ while(maxx ...原创 2021-03-29 11:06:57 · 885 阅读 · 0 评论 -
Codeforces Round #481 (Div. 3) F. Mentors(思维+二分)
有 n 个程序员,每个程序员都有他的技能分数,分数严格高的可以做分数低的程序员的老师,但是有 k 对人发生过矛盾,他们不能构成师生关系,问每个人最多可以做几个人的老师开始想的是开一个数组从 i∈[1,n] 记录分数<=i 的人数(离散化之后),然后对于每一组发生矛盾的人 x,y,将其满足条件的答案 -1 处理,但是这样需要知道 x,y 他们的答案emmm,也就是说,我们需要预处理出每一个人的答案,答案不就是比它小的所有数的个数之和吗,哪有离散化那么麻烦const int...原创 2021-03-08 21:08:27 · 208 阅读 · 3 评论 -
Educational Codeforces Round 105 (Rated for Div. 2) C. 1D Sokoban(思维+暴力+二分)
有 n 个箱子,m 个特殊位置,人在0 位置,他可以向左走也可以向右走,遇到箱子可以将箱子向移动方向推,一次可以推任意个,但是不可以将箱子往回拉,问最多可以将多少个箱子放到特殊位置显然这个题目要将正数位置和负数位置分开来做,而且数值范围 1e9,一开始想的是将特殊位置 b 数组作桶,但是#include <iostream>#include <map>#include <algorithm>#include <cstdio>us...原创 2021-03-03 16:58:50 · 667 阅读 · 0 评论 -
洛谷 P1704 寻找最优美做题曲线(二分)
首先要判断必刷题的 k 天是否能成立其次在剩下的天数中找到最长子序列,注意剩下的天数中可能会与必刷题的 k 天产生冲突,所以要有取舍,这里开了一个 vis 数组保存能够统计的天数最后在求最长上升子序列的问题中利用 nlogn 的方法解决const int N=5e5+5; int n,m; int i,j,k; int a[N]; int p[N]; bool vis[N]; int s[N],top=0;void ini...原创 2021-02-22 23:11:41 · 173 阅读 · 0 评论 -
洛谷 P1663 山(二分)
题目出得比较妙,我们可以思考枚举高度,但是如何判断,根据题目中给出的图,如果 + 的位置向下移动,那么最右边的直线和最左边的直线都无法看到,这就是题目的突破口在 check 函数中,对于高度 h,根据每条直线的斜率枚举 h 可以出现 x 轴上的范围,判断是否可行,灯光与直线平行时题目默认是可以的const int N=5e4+5; int n,m; int i,j,k; double x[N],y[N]; double a[N],b[N];...原创 2021-02-22 22:11:18 · 148 阅读 · 0 评论 -
Codeforces Round #703 (Div. 2) C2 - Guessing the Greatest (hard version)(二分+思维)
有 n 个数构成一种排列,每次询问一个区间,可以给出区间中第二大数的位置,在 20 次询问中找到区间最大数的位置又是一道交互题,一眼二分一开始想的是对于区间询问其第二大数的位置 pos,然后再查询区间中的第二大数的位置,如果两者相同,那么一定在,否则在中,但是策略被卡,询问次数过多值得注意的是题目一开始就可以得到中的第二大数的位置,利用这个位置与 mid 就可以完成 logN 的复杂度但是中间需要注意区间中第二大数的位置 pos 是固定的,二分过程...原创 2021-02-20 21:58:43 · 236 阅读 · 0 评论 -
Codeforces Round #703 (Div. 2) D - Max Median(二分+思维)
有 n 个数,在长度>=k 的任意子区间内寻找其中位数,使得这个中位数最大记得洛谷上有一个题是主席树+二分用到的一个芝士我们二分枚举答案 x,大于等于 x 的数记为 1,小于 x 的数记为 -1,若有任意一个长度 >=k 的子区间满足和为正数,那么 x 可以记为最小答案这里可能会有疑惑,枚举的 x 不存在于原数组内该怎么办?例如在 5 1 4 2 6 中查找 3 (3 此时是要查找的中位数),虽然此时 3 为答案,但是 3 并不是最后的答案而二分单调性的证明:...原创 2021-02-19 17:33:45 · 140 阅读 · 0 评论 -
Codeforces Round #700 (Div. 2) C. Searching Local Minimum(二分)
有最多 100 次询问,在 100 次询问之内,找到一个数 a[i] ,其中 a[i-1]>a[i]<a[i+1],当然一共有 n 个数,且这个数列为长度为 n 的排列二分查找一个区间 [l.r] 使得 a[l]>a[l-1] 并且 a[r]<a[r+1],如果中间 mid 位置 a[mid]>a[mid+1] ,那么 l 变为 mid+1,反之 r=midconst int N=1e6+5; int n,m,t; int i...原创 2021-02-08 14:55:40 · 202 阅读 · 1 评论 -
第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛 建立火车站(二分)
题目描述新冠疫情,导致了各个城市之间物资输送的障碍。假设有N个城市在一条直线上,为了物资能顺利抵达各个城市,可以在路线上建立最多个数为K个暂时停靠站,由于火车在两个站台(城市也算站台)之间的距离越近,需要的总花费越少,因此我们需要让火车相邻两个站台之间的最大距离最小,求出距离L,2 ≤N ≤100000, 0 ≤K ≤100000,所有城市坐标小于等于10^12,且不存在负值。提醒: 城市坐标均为正整数,且停靠站只能建在整数坐标点上。输入描述:第一行输入城市个数N,可建立停靠站个数K.原创 2021-01-30 21:22:09 · 347 阅读 · 0 评论 -
洛谷 P3611 [USACO17JAN]Cow Dance Show S(线段树+二分)
//#pragma GCC optimize(2)#include <bits/stdc++.h>#include <iostream>#include <cmath>#include <cstdio>#include <algorithm>#include <cstring>#include <queue>#include <vector>#include <utility>#.原创 2020-11-29 17:03:05 · 323 阅读 · 0 评论 -
洛谷 P1083 借教室(差分+二分)
一眼差分,被差分虐的太惨了题目知道用差分求解后比那的简单许多,区间大小为 1e6 ,利用二分枚举可以最多到第几天满足教室数目,所以答案就是 ans+1const int N=1e6+5; int i,j,k; int n,m; int a[N]; struct Node { int l,r,d; void read(){ sddd(d,l,r); } }seg[N]; int diff...原创 2020-11-29 09:49:18 · 371 阅读 · 0 评论 -
SGU 154. Factorial(二分+数学)
给出一个询问 Q,问是否存在一个数 N,使得 N !中包含 Q 个 0,如果有输出 N 的值其实想一下应该可以想到,如果 N!中包含 0 的话,一定是在最后面,而阶乘当中想要形成 10,只能依靠 5*2 所作的贡献,因为 2 的个数 >= 5 的个数,也就是寻找的个数。根据容斥原理,N/5 之后,N/25 的贡献只有 1,同理,以此类推 N/625 的贡献也为 1。所以我们只需要找到一个数 N ,使得当式子 可以成立即可利用二分查找,下界显然是 0,上界 5...原创 2020-11-24 15:31:44 · 167 阅读 · 0 评论 -
2020 ICPC 2020(二分)
给出一个长度为 n 的字符串,统计 {si,sj,su,sv}=2020 的数量,并且 i<j<u<v ,如果一个字符被统计过,那么它不能再次被统计知道题目考察二分之后其实并没有那么难,二分枚举答案 ans,但是要考虑如何构成 2020 才能 ans 个,我们可以按位考虑,必须有第一个2 后面的 0 才有效,有 ans 个 2 后,第二个 2 才开始计数const int N=1e5+5; int i,j,k; int n,m,t; i...原创 2020-11-19 13:56:11 · 481 阅读 · 0 评论 -
HDU 3756 && UVALive 4986 Dome of Circus Dome of Circus(计算几何基础+三分)
Sample Input11.00 0.00 1.0021.00 0.00 1.000.00 1.50 0.5031.00 0.00 1.000.00 1.50 0.50-0.50 -0.50 1.00Sample Output3.000 1.5002.000 2.0002.000 2.000原创 2020-11-18 10:20:10 · 153 阅读 · 0 评论 -
HDU 4355 Party All the Time(三分)
const int N=5e4+5; int i,j,k; int n,m,t; double a[N],x[N];double calc(double pos){ double ans=0; for(int i=1;i<=n;i++) ans+=a[i]*pow(fabs(pos-x[i]),3); return ans;}int main(){ //IOS; int num=0; rush(){ ...原创 2020-11-18 09:57:16 · 185 阅读 · 0 评论 -
UVA10566 Crossed Ladders(计算几何+二分)
有两把梯子搭在墙上,给出这两把梯子的长度 x,y,以及他们的交点,交点的高度为 h,求这两个房屋之间的距离 double x,y,h;bool C(double aim){ double ans=1.0/sqrt(x*x-aim*aim)+1.0/sqrt(y*y-aim*aim); if(ans<1/h) return true; else return false;}int main(){ //IOS; while(~s...原创 2020-11-14 15:47:13 · 274 阅读 · 0 评论 -
Codeforces Round #678 (Div. 2) C. Binary Search(二分+组合数学)
给出数 n ,也就是说有 0~n-1 随机排列,给出 x 以及 x 的位置 pos,问 :在 x 固定在 pos 的条件下,利用二分搜索能够找到 x 的数列的排列方式有几种其实一开始做这个题的时候,一点思路都没有,但是画了一下数轴差不多就可以想出来,大体思路利用二分查找,枚举位置 mid,如果 mid > pos ,说明 mid 位置的数必须大于 x,如果 mid < pos,那么mid 位置的数必须小于 x,最后将剩下的数随意排列即可但是注意到几个边界条件(这也是二分...原创 2020-10-26 23:27:41 · 290 阅读 · 0 评论 -
C. Obtain The String(二分+思维)
有两个字符串 s,t现在可以从 s 中拿出任意多个字符,他们可以不是连续的,但是顺序不能变问经过多少次操作后才能得到 tint main(){ IOS; rush(){ string s,t; cin>>s>>t; vector<int> v[30]; for(i=0;s[i];i++){ int k=s[i]-'a'; ...原创 2020-08-09 16:10:44 · 369 阅读 · 1 评论 -
C - Pinkie Pie Eats Patty-cakes(二分+模拟)
const int N=2e5+5; int n,m,t; int i,j,k; int a[N]; int pos[N]; int maxx; bool C(int x)//间隔为 x{ int s=1; for(int i=1;i<=n;i++){//枚举题目中 ai 的范围 if(a[i]){ int tmp=a[i]; for(int j=s;j<=n...原创 2020-08-08 14:30:03 · 765 阅读 · 0 评论 -
C. Present(二分)
有 n 多花,分别高度为 a[i] 现在有种水可以将连续 k 朵花高度加 1,但只能使用 m 次求高度最小的那朵花最高有多少const int N=1e5+5; int n,m,t; int i,j,k; ll a[N]; ll b[N];bool C(ll aim){ for(i=1;i<=n;i++) b[i]=a[i]; int ans=0; for(int i=1;i<=n;i++){ ...原创 2020-08-01 22:14:55 · 434 阅读 · 0 评论 -
D. Salary Changing(区间二分)
const int N=2e5+5; int n,m,t; int i,j,k; int l[N],r[N];int main(){ //IOS; rush(){ sd(n); ll sum[3]={0}; sll(sum[0]); int midd=n+1>>1; for(i=1;i<=n;i++) sdd(l[i],r[i]),sum[1]+=...原创 2020-07-17 17:35:58 · 238 阅读 · 0 评论 -
D. A Game with Traps(贪心+二分搜索+前缀和)
有 m 个士兵通过长度为n+1的道路,可是道路上有k个陷阱。每个陷阱都有危险程度,若士兵的敏捷没达到对应危险程度,那么这个士兵不能够通过这个陷阱。有一名队长,队长可以去拆陷阱,每个陷阱在在区间 [1,n+1] 上分别为 [Li,Ri],队长拆陷阱必须去 Ri 的位置。队长血厚。问最多有多少士兵跟随队长在 t 时间内走到 n+1 点本题采用二分枚举危险度,只有敏捷度>=危险度的士兵可以过去要用最小的时间过去,那么教官必须采用最短的时间去吧相应的陷阱拆掉我们看这三个区间,如果这些...原创 2020-07-07 20:43:00 · 384 阅读 · 1 评论 -
Duathlon
const int N=1e6+5; int n; double m,t; int i,j,k; pair<double,double> p[N]; double C(double x){ //计算第 n 位与其余选手的耗时之差 double ans=inf; double t1=x/p[n-1].first+(m-x)/p[n-1].second; for(i=0;i<n-1;i++){ doub...原创 2020-06-26 11:10:11 · 266 阅读 · 0 评论 -
UmBasketella(三分裸题)
#define E 1e-11const double pi=acos(-1.0); int n,m,t; int i,j,k; double S;double C(double r) //计算体积{ double tmp=S-pi*r*r; double L=tmp/pi/r; //母线 double h=sqrt(L*L-r*r); return pi*r*r*h/3.0;}double get_high(double r)...原创 2020-06-25 22:12:21 · 249 阅读 · 0 评论 -
1435:曲线
#define E 1e-11const int N=1e4+5; int n,m,t; int i,j,k; double a[N],b[N],c[N];double H,h,D;double C(double x){ double maxx=-1; for(i=0;i<n;i++){ maxx=max(a[i]*x*x+b[i]*x+c[i],maxx); } return maxx;}int main(...原创 2020-06-25 17:38:49 · 367 阅读 · 0 评论 -
1438:灯泡
#define E 1e-6 double H,h,D;double C(double x){ return x+D*(h-x)/(H-x);}int main(){ IOS; rush(){ cin>>H>>h>>D; double l=0,r=h; while(r-l>E){ double mid=(r+l)/2.0; do...原创 2020-06-25 17:18:58 · 388 阅读 · 0 评论 -
1434:Best Cow Fences
const int N=1e5+5; int n,m,t; int i,j,k; double a[N],b[N],sum[N];int main(){ cin>>n>>k; double maxx=0; for(int i=1;i<=n;i++) { sf(a[i]); maxx=max(maxx,a[i]); } double eps=1e-4; double l=0,r=maxx; while(r-l>...原创 2020-06-24 18:42:26 · 271 阅读 · 0 评论 -
Dropping tests
题意:戳这里//#pragma GCC optimize(2)//#include <bits/stdc++.h>#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <vector>#include <functional>#include <cmath>#define...原创 2020-06-21 22:10:00 · 309 阅读 · 0 评论 -
1436:数列分段II
#pragma GCC optimize(2)#include <bits/stdc++.h>#define rush() int T;cin>>T;while(T--)#define go(a) while(cin>>a)#define ms(a,b) memset(a,b,sizeof a)#define E 1e-8#define sd(a) scanf("%d",&a)#define sdd(a,b) scanf("%d%d",&am...原创 2020-06-21 20:37:33 · 397 阅读 · 0 评论 -
1433:愤怒的牛
#pragma GCC optimize(2)#include <bits/stdc++.h>//#include <iostream>//#include <algorithm>//#include <cstdio>//#include <cstring>#define rush() int T;cin>>T;while(T--)#define go(a) while(cin>>a)#define ...原创 2020-06-21 19:54:14 · 702 阅读 · 0 评论