设为首页 加入收藏

TOP

HDU 1542 Atlantis (线段树求矩阵覆盖面积)
2015-07-24 05:50:35 来源: 作者: 【 】 浏览:3
Tags:HDU 1542 Atlantis 线段 矩阵 覆盖 面积


题意:给你n个矩阵求覆盖面积。

思路:看了别人的结题报告

给定一个矩形的左下角坐标和右上角坐标分别为:(x1,y1)、(x2,y2),对这样的一个矩形,我们构造两条线段,一条定位在x1,它在y坐标的区间是[y1,y2],并且给定一个cover域值为1;另一条线段定位在x2,区间一样是[y1,y2],给定它一个cover值为-1。根据这样的方法对每个矩形都构造两个线段,最后将所有的线段根据所定位的x从左到右进行排序


#include 
  
   
#include 
   
     #include 
    
      #include 
     
       using namespace std; #define M 100 #define inf 0x3fffffff #define maxn 500000*2 struct seg { int flag; double up,down,x; }line[M*5]; int cmp(seg a,seg b) { return a.x
      
       =r||tree[id].up<=l) return 0; if(tree[id].flag) { if(tree[id].cover>0)//递归到了叶子节点 { double temp_x=tree[id].x; double ans=(x-temp_x)*(tree[id].up-tree[id].down); tree[id].x=x;//定位上一次的x tree[id].cover+=flag; return ans; } else { tree[id].cover+=flag; tree[id].x=x; return 0; } } double ans1,ans2; ans1=insert(id*2,x,l,r,flag); ans2=insert(id*2+1,x,l,r,flag); return ans1+ans2; } int main() { int t,ca=1; while(scanf("%d",&t)&&t) { double x1,x2,y1,y2; int k=0; for(int i=0;i
       
        

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇LeetCode――Roman to Integer 下一篇POJ 2918 Tudoku [搜索]

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: