BZOJ 1012 单调队列+二分】的更多相关文章

思路: 维护一个单减的序列 序号是单增的 每回二分查找第一个比询问的大的值 我手懒 用得lower_bound //By SiriusRen #include <cstdio> #include <algorithm> using namespace std; #define int long long int m,mod,top,jy,ans,tot; char ch[3]; struct Node{int pos,weight;}node[200050],t; bool ope…
P2698 [USACO12MAR]花盆Flowerpot 一看标签........十分后悔 标签告诉你单调队列+二分了............ 每次二分花盆长度,蓝后开2个单调队列维护最大最小值 蓝后就是code了 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; inline int Max(int a,int b)…
考试的时候打了个树链剖分,而且还审错题了,以为是每天找所有点的最长路,原来是每天起点的树上最长路径再搞事情.. 先用dfs处理出来每个节点以他为根的子树的最长链和次长链.(后面会用到) 然后用类似dp的方法把每个节点的最长路径求出来. 下面是具体解释,请思考 以一个节点为例(w为它与父亲节点道路的权值) 一.如果它父亲节点的最长路径不过它 那么它最长路径等于它父亲最长路径+w(自己画图即可理解,往上走的) 它的次长路径等于它的最长链(只能往下走) 二.如果过它 那么它的最长路径有两种可能 ①它的…
Tom owns a company and he is the boss. There are n staffs which are numbered from 1 to n in this company, and every staff has a ability. Now, Tom is going to assign a special task to some staffs who were in the same group. In a group, the difference…
题目链接 Solution 转化一下,就是个单调队列. 可以发现就是一段区间 \([L,R]\) 使得其高度的极差不小于 \(d\) ,同时满足 \(R-L\) 最小. 然后可以考虑二分然后再 \(O(n)\) 判断, 时间复杂度 \(O(nlogn)\) . Code #include<bits/stdc++.h> #define ll long long #define inf 0x3f3f3f3f using namespace std; const int maxn=1000008;…
B. Queue 这个题目会做的很偶然,突然想到的,因为我们要求离这只海象的最远的比他年轻的海象,这个年轻的海象可以用单调栈维护. 就是从前往后遍历一遍,单调栈里面存年龄从小往大的海象,这个为什么这么存呢,因为如果后面有比这个队列里面更年轻的海象, 那么就可以更新,而且这个更新是正确的,不会有影响,这个可以自己想一想/ 然后就可以得到一个单调栈的数组,这个时候因为单调栈是单调的,所以可以用二分来查找我们所需要的值. #include <cstdio> #include <cstdlib&…
做4次单调队列优化DP. /************************************************************** Problem: 1047 User: idy002 Language: C++ Result: Accepted Time:2088 ms Memory:16756 kb ****************************************************************/ #include <cstdio> #…
思路: 对于每一个r 要找最小的符合条件的l最优 这时候就要找在这个区间中 d长度的和的最大值 用单调队列更新就好了 //By SiriusRen #include <cstdio> #include <algorithm> using namespace std; #define N 2000100 long long sum[N],p,g[N]; int n,d,w[N],head,tail,l,ans,que[N]; signed main(){ scanf("%d…
[题意] 维护一个单调递减的q数组,用id数组记录q数组的每个下标对应在原数组的位置,那么id数组一定有单调性(q数组中越靠后,原数组中也靠后),然后二分查找这个数 [AC] #include<bits/stdc++.h> using namespace std; typedef long long ll; int n,d; ; int q[maxn],id[maxn]; int tail;int cnt; int last; void add(int x) { while(tail&…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2216 那个关于位置的代价是带根号的,所以随着距离的增加而增长变慢:所以靠后的位置一旦比靠前的位置优,就会一直更优(因为距离相同地增长,基数大的增长慢),所以有决策单调性. 一开始写了和 bzoj 4709 一样的实现,就是使得队列里相邻两个位置的 “后一个位置优于前一个位置的时间” 是单调递增的.但是却 TLE .不知道为什么. #include<cstdio> #include<…