一.题面 POJ3470 二.分析 POJ感觉是真的老了. 这题需要一些预备知识:扫描线,离散化,线段树.线段树是解题的关键,因为这里充分利用了线段树区间修改的高效性,再加上一个单点查询. 为什么需要离散化? 坐标太分散了,据说可以到 long long,但是就这么多个点,所以离散化一下,方便处理. 为什么用扫描线算法? 用扫描线,可以方便的求出一个bird到wall的距离,因为是顺着一个方向扫的(这题需要从四个方向扫),所以保证了准确性和高效性. 为什么用线段树? 用线段树非常明显,因为墙有这…
Problem - 4419 题意不难,红绿蓝三种颜色覆盖在平面上,不同颜色的区域相交会产生新的颜色,求每一种颜色的面积大小. 比较明显,这题要从矩形面积并的方向出发.如果做过矩形面积并的题,用线段树做的,这题就只差一个把每个区域计算单独出来的思路了. 这里不详细介绍扫描线,只是说一下针对这题的做法.其实网上有好多版本,都是直接单独计算答案的.然而,我稍微绕了个小弯,我觉得我这种处理方法也是比较容易想到以及实现的.如果我们用7棵线段树计算R.G.B.R||G.R||B.B||G.R||G||B这…
题目链接题意:给定n个矩形,求面积并,分别给矩形左上角的坐标和右上角的坐标. 分析: 映射到y轴,并且记录下每个的y坐标,并对y坐标进行离散. 然后按照x从左向右扫描. #include <iostream> #include <cstdio> #include <vector> #include <cstring> #include <cstdlib> #include <algorithm> #define LL __int64…
Description Ted has a new house with a huge window. In this big summer, Ted decides to decorate the window with some posters to prevent the glare outside. All things that Ted can find are rectangle posters. However, Ted is such a picky guy that in ev…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3642 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description Jack knows that there is a great underground treasury in a secret region. And he has a special d…
[BZOJ3958][WF2011]Mummy Madness Description 在2011年ACM-ICPC World Finals上的一次游览中,你碰到了一个埃及古墓. 不幸的是,你打开了坟墓之后,才发现这是一个坏主意:突然之间,原本空无一物的沙漠上已经爬满了暴躁的木乃伊.(如果你也沉睡几千年而突然被惊醒,你也会变得如此暴躁的.)(幸运的是,当你做完这道题的时候,你醒来了,发现你在弗罗里达的酒店里.那些木乃伊只是一场梦.) 面对这一大堆疯狂的木乃伊,你唯一的机会就是试图在他们抓到你之…
题目描述 给定一个序列A[i],每次询问l,r,求[l,r]内最长子串,使得该子串为不上升子串或不下降子串 输入 第一行n,表示A数组有多少元素接下来一行为n个整数A[i]接下来一个整数Q,表示询问数量接下来Q行,每行2个整数l,r 输出 对于每个询问,求[l,r]内最长子串,使得该子串为不上升子串或不下降子串 样例输入 91 2 3 4 5 6 5 4 351 61 72 71 95 9 样例输出 66564 题解 离线扫描线+线段树 考虑询问 $[l,r]$ ,对于选出子串的左端点i,右端点…
题意:给定平面直角坐标系中的N个矩形,求它们的面积并. 题解:建立一个四元组(x,y1,y2,k).(假设y1<y2)用来储存每一条线,将每一条线按x坐标排序.记录所有的y坐标以后排序离散化.离散化之后线段树的第i个叶子节点储存的是y[i+1]-y[i]. 这里的线段树用的是一个不用下传延迟标记的做法(仅限这一类题).线段树的每一个节点维护length(这个节点的子节点覆盖的长度)和cnt(这个节点代表的线段[l,r]所覆盖的次数). 任意一个区间都可以被线段树划分成O(logn)个子区间,我们…
题目链接:点击打开链接 题目描写叙述:给定一些矩形,求这些矩形的总面积.假设有重叠.仅仅算一次 解题思路:扫描线+线段树+离散(代码从上往下扫描) 代码: #include<cstdio> #include <algorithm> #define MAXN 110 #define LL ((rt<<1)+1) #define RR ((rt<<1)+2) using namespace std; int n; struct segment{ double l…
题面传送门 首先我们把这两个贡献翻译成人话: 区间 \([l,r]\) 产生 \(p_1\) 的贡献当且仅当 \(a_l,a_r\) 分别为区间 \([l,r]\) 的最大值和次大值. 区间 \([l,r]\) 产生 \(p_2\) 的贡献当且仅当 \(a_l\) 为区间 \([l,r]\) 的最大值且 \(a_r\) 不是区间 \([l,r]\) 的次大值,或者 \(a_r\) 为区间 \([l,r]\) 的最大值且 \(a_l\) 不是区间 \([l,r]\) 的次大值. 我们考虑转化贡献体…