Rectangles Area Sum
2015-11-22 17:05
323 查看
#include<iostream> #include<stdio.h> #include<math.h> #include<string.h> #include<algorithm> using namespace std; #define re(i,n) for(int i=0;i<n;i++) const int maxn=1e4+7; const int mod=1e9+7; typedef long long ll; int x[maxn*2],y[maxn*2],xsz,ysz; struct Node{ int fy,ty; int x; int type; }a[maxn*2]; bool cmp(const Node&m,const Node&n){ return m.x<n.x; } struct Data{ int cnt,len; }da[maxn*16]; int fy,ty,type; void insert(int id,int f,int t){ //printf("inserting node %d ,from %d,to %d,fy %d ,ty %d,type %d\n",id,y[f],y[t],fy,ty,type); if(fy<=y[f]&&ty>=y[t]){ da[id].cnt+=type; if(da[id].cnt==0){ if(f==t)da[id].len=0; else da[id].len=da[id<<1].len+da[id<<1|1].len; }else da[id].len=y[t]-y[f]; return; } int mid=(f+t)>>1; if(ty>y[mid])insert(id<<1|1,mid,t); if(fy<y[mid])insert(id<<1,f,mid); if(da[id].cnt==0)da[id].len=da[id<<1].len+da[id<<1|1].len; else da[id].len=y[t]-y[f]; } int main(){ int n; while(cin>>n&&n){ re(i,n){ scanf("%d%d%d%d",&x[i*2],&y[i*2],&x[i*2+1],&y[i*2+1]); a[i*2].fy=a[i*2+1].fy=min(y[i*2],y[i*2+1]); a[i*2].ty=a[i*2+1].ty=max(y[i*2],y[i*2+1]); a[i*2].x=min(x[i*2],x[i*2+1]); a[i*2+1].x=max(x[i*2],x[i*2+1]); a[i*2].type=1; a[i*2+1].type=-1; } sort(y,y+n*2),ysz=unique(y,y+n*2)-y; sort(a,a+n*2,cmp); ll ans=0; memset(da,0,sizeof(da)); fy=a[0].fy,ty=a[0].ty,type=a[0].type; insert(1,0,ysz-1); //cout<<"The first time "<<da[1].cnt<<endl; //cout<<"ans is "<<ans<<endl; for(int i=1;i<n*2;i++){ ans+=(ll)(a[i].x-a[i-1].x)*da[1].len; ans%=mod; fy=a[i].fy,ty=a[i].ty,type=a[i].type; //printf("i=%d\t ans=%lld\t ",i,ans); insert(1,0,ysz-1); } cout<<ans<<endl; } return 0; }
相关文章推荐
- [XCode A] - 编程相关问题
- 【Effective C++】资源管理
- Rectangles Area Sum
- org.springside.modules.orm中的page类自我解读
- 【C语言】【笔试题】模拟实现memset
- 搭建hive1.2.1图形界面
- 四元数插值matlab实现
- 【Effective C++】构造/析构/赋值运算
- JDBC--批量处理
- socket数据收发
- 搭建hive1.2.1图形界面
- java设计模式之单例模式
- Oracle12c学习(一)---Redhat Enterprise Linux7安装Oracle12c(Oracle11g)
- 谈谈JavaScript类型检测
- 执行带参数的Sql语句(防止注入)
- 开始我的javaweb学习之旅
- [LeetCode]Permutations II
- NYOJ-958山谷(二)【模拟】
- LeetCode 063 Unique Paths II
- Jade之Filters