
二分
make_it_for_good
这个作者很懒,什么都没留下…
展开
-
bzoj 1692 二分+hash
如果当前两边字符不同,那么选小的那边。否则二分+hash找到第一个不同的位置,如果左边小输左边,否则输右边。 逗比输出。。。#include <bits/stdc++.h>using namespace std;#define ull unsigned long long #define N 31000#define seed 133int n;char s[N],s1[11],ans原创 2016-10-18 18:36:55 · 569 阅读 · 0 评论 -
bzoj 2653 二分+主席树
这个东西可以二分答案,设当前答案为x,那么将序列中大于等于x的数设为1,小于x的数设为-1。 这样如果一个区间的和≥0\ge0,那么这段区间的中位数≥x\ge x。、 因此只需要求最大连续子段和是否大于等于0就可以了。 最大连续子段和可以用线段树求。 不过对于每一个二分的答案都需要一个线段树。 由于当答案增加时线段树上只有一个点的值改变,因此可以用可持久化线段树维护。#include <b原创 2016-10-21 08:53:57 · 274 阅读 · 0 评论 -
bzoj 4078 [Wf2014]Metal Processing Plant 2SAT 二分图
忍住想骂人和打人的冲动。。。。。。。。。bz没写数据范围,n<=200 从大到小枚举一块的权值,另一块的权值可以二分。用2SAT验证合法性。草细节实在不想写了,自己看代码吧。。。#include <bits/stdc++.h>using namespace std;#define N 410#define M 410000int n,num,cnt,ans,scc,top,tot;int原创 2016-11-02 09:31:58 · 691 阅读 · 0 评论 -
bzoj 2792 [Poi2012]Well 单调队列 二分
二分答案,先求一个满足相邻两项之差不大于答案时每个位置的最大值b[i]。 设当前位置为i,二分的答案为x,那么需要满足对于j∈[1,n]j\in[1,n]b[i]=min(a[j]+|i−j|∗x)b[i]=min(a[j]+|i-j|*x) 对于j<ij<i直接维护最小值,对于j>ij>i用单调队列。 然后枚举0的位置,那么受影响区间的左右端点都单调。 求一个前缀和后可以O(1)O(1)计原创 2016-11-14 19:31:13 · 294 阅读 · 0 评论 -
bzoj 2067 [Poi2004]SZN 贪心 二分
对于第一问答案就是∑(du[i]−1)/2+1\sum{(du[i]-1)/2}+1 对于第二问先二分答案,对于一个非根的点,一定有一条从父亲向下的链,设f[i]表示到点i父亲往下的链最短长度。 将当前点的所有儿子的f[son[i]]+1f[son[i]]+1 放到一起排个序。 二分f[i]的位置,检验时去掉二分位置的值,贪心每次拿一个最小的匹配最大的(组成一条链),如果儿子总数是偶数把剩余的原创 2016-12-03 19:32:09 · 1000 阅读 · 0 评论 -
bzoj 2006 [NOI2010]超级钢琴 二分答案 可持久化线段树
大家好,这里是一个log^2的智障。 看到第K大直接想到二分答案+主席树,主席树维护区间的个数和区间的和。良心BZ测总时限竟然16s过了。。。 原来正解就是主席树套个堆。。。#include <bits/stdc++.h>using namespace std;#define N 1010000#define M 20000000#define ll long long#define原创 2016-12-27 18:18:56 · 361 阅读 · 0 评论