设为首页 加入收藏

TOP

Hdu 4419 Colourful Rectangle(线段树扫描线)
2015-07-20 17:37:33 来源: 作者: 【 】 浏览:2
Tags:Hdu 4419 Colourful Rectangle 线段 扫描

题目大意:

给出多个不同颜色的矩形,求最后覆盖的颜色的面积。


思路分析:

我是自己手动暴力枚举。

比赛的时候漏了一种情况。

RGB 可以从 RG+RB组合来(只是举例,就是说可以从两种颜色组合而来)。

然后就只需要维护所有的颜色

用扫描线来判断。


#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #define MAXN 42222 using namespace std; typedef long long ll; struct node { ll s,e,h,type,color;//记录的是每一条线的起点 终点 距离X周的面积 bool operator < (const node &cmp)const { return h
      
       =e) { cnt[num][color]+=val; pushup(num,s,e); return ; } int mid=(s+e)>>1; if(l<=mid)update(num<<1,s,mid,l,r,val,color); if(r>mid)update(num<<1|1,mid+1,e,l,r,val,color); pushup(num,s,e); } void debug(int num,int s,int e) { printf("s = %d e = %d\n",s,e); for(int i=0;i<=6;i++)printf("%d ",tree[num][i]); puts(""); if(s==e)return; int mid=(s+e)>>1; debug(num<<1,s,mid); debug(num<<1|1,mid+1,e); } ll ans[7]; int main() { int n,T; int cas=1; for(scanf("%d",&T);T--;) { scanf("%d",&n); int m=0; for(int i=1;i<=n;i++) { char str[5]; ll x1,y1,x2,y2; scanf("%s%I64d%I64d%I64d%I64d",str,&x1,&y1,&x2,&y2); ll co; if(str[0]=='R')co=0; else if(str[0]=='G')co=1; else if(str[0]=='B')co=2; m++; x[m]=x1; line[m].s=x1,line[m].e=x2,line[m].h=y1,line[m].type=1,line[m].color=co; m++; x[m]=x2; line[m].s=x1,line[m].e=x2,line[m].h=y2,line[m].type=-1,line[m].color=co; } sort(line+1,line+1+m); sort(x+1,x+1+m); int tot=unique(x+1,x+1+m)-x-1; memset(ans,0,sizeof ans); memset(tree,0,sizeof tree); memset(cnt,0,sizeof cnt); for(int i=1;i
       
        

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Ural 1416 Confidential,次小生.. 下一篇UVA 514 Rails

评论

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

·用 Python 进行数据 (2025-12-25 15:49:09)
·如何学习Python数据 (2025-12-25 15:49:07)
·利用Python进行数据 (2025-12-25 15:49:04)
·Java 学习线路图是怎 (2025-12-25 15:19:15)
·关于 Java 学习,有 (2025-12-25 15:19:12)