bzoj 1007 凸壳】的更多相关文章

首先明确一个概念 左面内个叫上凸壳,右面那个叫下凸壳 然后我们只需要维护一个上图壳就行了,先按着斜率排序,每次加进来一条边,判断tot边和这个边与tot-1边的交点横坐标, 如果这条边的横坐标小就一直弹栈就好了 /**************************************************************     Problem:     User: BLADEVIL     Language: Pascal     Result: Accepted     Ti…
题目链接 可以看出我们是要维护一个下凸壳. 先对斜率从小到大排序.斜率最大.最小的直线是一定会保留的,因为这是凸壳最边上的两段. 维护一个单调栈,栈中为当前可见直线(按照斜率排序). 当加入一条直线l时,可以发现 如果l与栈顶直线l'的交点p在 l'入栈前与栈顶直线 的交点p'的左侧,那么l会覆盖l'(直接用与第一条直线的交点好像也可以?).弹出l'加入l. 如果p在p'右侧,则保留栈顶直线,并将l入栈:如果重合,那么后加入的直线应该会覆盖l',弹出l'加入l. 在斜率符号改变时结果也是一样的.…
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3672 题意:给出一棵有根树(1为根),边有长度.每个点u有三个属性(len[u],p[u],q[u]),每次u可以转移到u的某个祖先节点v(v满足dist(u,v)<=len[u]),代价为p[u]*dist(u,v)+q[u].求每个点都转移到1的代价. 思路:首先设f[u]表示u转移到1的最小代价,那么我们可以得到一个DP方程: f[u]=min(f[v]+p[u]*(s[u…
3165: [Heoi2013]Segment Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 202  Solved: 89[Submit][Status] Description 要求在平面直角坐标系下维护两个操作: 1.在平面上加入一条线段.记第i条被插入的线段的标号为i.   2.给定一个数k,询问与直线 x = k相交的线段中,交点最靠上的线段的编号. Input 第一行一个整数n,表示共n 个操作. 接下来n行,每行第一个数为0或1.…
BZOJ 1007 水平可见直线 题面 平面直角坐标系上有一些直线,请求出在纵坐标无限大处能看到哪些直线. 题解 将所有直线按照斜率排序(平行的直线只保留最高的直线),维护一个栈,当当前直线与栈顶直线的交点在栈顶两条直线的交点的左边,则弹出栈顶元素.可以画图证明这是正确的(因为我们要维护一个下凸的图形). #include <cmath> #include <cstdio> #include <cstring> #include <algorithm> us…
1007 思路: 维护一个下凸壳: 用单调栈来维护这玩意儿: 先将斜率排序: 然后判断栈顶元素和当前元素的交点x是否小于栈顶元素和栈顶上一个元素的交点x: 注意: 人神共愤的精度问题和输出空格问题: 来,上代码: #include <cmath> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #d…
题意 题目链接 分析 首先,如果加到了车头所有之前的车厢都不可能成为答案. 如果加到了车尾,容易发现对于 \(x_2<x_3\) 而言在某个时刻会出现 2 又比 3 优的情况. 具体来讲,如果存在 \(sx_3+b+y_3\ge sx_2+b+y_2​\) ,那么 2 比 3 优. 推一推:\(-s<\frac{y_3-y_2}{x_3-x_2}​\) ,所以维护一个下凸壳即可. 时间复杂度 \(O(n)​\) . 代码 #include<bits/stdc++.h> using…
2726: [SDOI2012]任务安排 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1580  Solved: 466[Submit][Status][Discuss] Description 机 器上有N个需要处理的任务,它们构成了一个序列.这些任务被标号为1到N,因此序列的排列为1,2,3...N.这N个任务被分成若干批,每批包含相邻的 若干任务.从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti.在每批任务开始前,机器…
题目链接  2016 ZJCPC Problem B 题意  CF 660F的树上版本. 其他做的方法都差不多,关键是把凸壳放到树上. 每次确定扔掉几个元素的时候直接$O(1)$修改(先不清楚这个位置之后的元素因为之后还要恢复),然后$O(1)$恢复,通过这个来实现可持久. #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a); i <= (b); ++i) #define dec…
[gym101982M][思维好题][凸壳]Mobilization 题目链接 20182019-acmicpc-pacific-northwest-regional-contest-div-1-en.pdf 题目大意 现在有\(n\)种士兵,每种士兵有一个血量\(h_i\)和潜力\(p_i\)以及花销\(c_i\). 你一共有\(C\)块钱,现在你要用这些钱去雇佣士兵,你雇佣某种士兵的数量可以是任意实数(也就是说并不一定要整数).最后你构建出来军团的战斗力等于总血量与总潜力的乘积. \((n\…