hdu1542(矩形面积并)

链接:点击打开链接

题意 :给出n个矩形的左下角和右上角的坐标,求矩形面积的并

代码:
#include 
#include 
#include 
#include 
using namespace std;
const int SIZE=505;
int add[SIZE<<2];                               //add为区间标记,与懒惰标记类似
double x[SIZE<<2],sum[SIZE<<2];
struct node{
    int ss;                                     //ss=1为下边,ss=-1为上边
    double l,r,h;                               //分别记录线段的左端,右端和高度
    node(){}
    node(double a,double b,double c,int d):l(a),r(b),h(c),ss(d){}
    friend bool operator<(node p,node q){       //因为是从下到上扫描因此,需要按照高度排序
        return p.h>1;
    if(L<=m)
    update(L,R,c,l,m,rt<<1);
    if(R>m)
    update(L,R,c,m+1,r,rt<<1|1);
    pushup(rt,l,r);
}
int main(){                                     //用的是从下到上扫描,也就是扫描线,又因为
    int n,i,k,l,m,r,cas;                        //x坐标可能过多,因此需要对x轴进行离散化,从
    double a,b,c,d,ans;                         //下到上扫描也就是遇到下边进行成段加1,遇到
    cas=1;                                      //上边就是成段减1,所以问题就变成了线段树成
    while(scanf("%d",&n)!=EOF&&n){              //段更新,但我们还需要解决线段重叠的问题,只
        k=1,ans=m=0;                            //要修改pushup就能巧妙的解决这个问题
        for(i=0;i

你可能感兴趣的:(---------线段树)