Rectangles Area Sum
#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++)
;
;
typedef long long ll;
],y[maxn*],xsz,ysz;
struct Node{
int fy,ty;
int x;
int type;
}a[maxn*];
bool cmp(const Node&m,const Node&n){
return m.x<n.x;
}
struct Data{
int cnt,len;
}da[maxn*];
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;
){
;
].len+da[id<<|].len;
}else da[id].len=y[t]-y[f];
return;
}
;
|,mid,t);
,f,mid);
)da[id].len=da[id<<].len+da[id<<|].len;
else da[id].len=y[t]-y[f];
}
int main(){
int n;
while(cin>>n&&n){
re(i,n){
scanf(],&y[i*],&x[i*+],&y[i*+]);
a[i*].fy=a[i*+].fy=min(y[i*],y[i*+]);
a[i*].ty=a[i*+].ty=max(y[i*],y[i*+]);
a[i*].x=min(x[i*],x[i*+]);
a[i*+].x=max(x[i*],x[i*+]);
a[i*].type=;
a[i*+].type=-;
}
sort(y,y+n*),ysz=unique(y,y+n*)-y;
sort(a,a+n*,cmp);
ll ans=;
memset(da,,sizeof(da));
fy=a[].fy,ty=a[].ty,type=a[].type;
insert(,,ysz-);
//cout<<"The first time "<<da[1].cnt<<endl;
//cout<<"ans is "<<ans<<endl;
;i<n*;i++){
ans+=(ll)(a[i].x-a[i-].x)*da[].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(,,ysz-);
}
cout<<ans<<endl;
}
;
}
Rectangles Area Sum的更多相关文章
- SPOJ CIRU The area of the union of circles (计算几何)
题意:求 m 个圆的并的面积. 析:就是一个板子题,还有要注意圆的半径为0的情况. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024 ...
- sum(),max(),avg(),RATIO_TO_REPORT()--分组统计
select id,area, sum(1) over() as 总记录数, sum(1) over(partition by id) as 分组记录数, sum(score) over() as 总 ...
- Oracle分析函数(一)
一.总体介绍 分析函数如何工作 语法 FUNCTION_NAME(<参数>,…) OVER (<PARTITION BY 表达式,…> <ORDER BY 表达式 < ...
- order_by_、group_by_、having的用法区别
写于 2012-11-20 22:14 doc文档上. Having 这个是用在聚合函数的用法.当我们在用聚合函数的时候,一般都要用到GROUP BY 先进行分组,然后再进行聚合函数的运算.运算完后 ...
- PICK定理模板
PICK定理: S=I+O/2-1 S为多边形面积,I多边形内部的格点,O是多边形边上的格点 其中边上格点求法: 假设两个点A(x1,y1),B(x2,y2) 线段AB间格点个数为gcd(abs(x1 ...
- BZOJ 1062
program candy bzoj1062; ; maxm=; maxn=; var n,len,m,i,p,t,l,r,c,d,q:longint; s:..,..maxn,..maxm] of ...
- oracle 10g函数大全--分析函数
oracle分析函数--SQL*PLUS环境 一.总体介绍 12.1 分析函数如何工作 语法 FUNCTION_NAME(<参数>,…) OVER (<PARTITION BY 表达 ...
- c++类的基础
1.抽象: 抽象出公有特性,包括公有动作,公有数据. 2.类:类是具有相同属性和行为的一组对象的集合(变量和函数) 声明格式: class 类名(Dog) { 类体:(数据和函数成员)默认为私有成员, ...
- 「SCOI2015」小凸想跑步 解题报告
「SCOI2015」小凸想跑步 最开始以为和多边形的重心有关,后来发现多边形的重心没啥好玩的性质 实际上你把面积小于的不等式列出来,发现是一次的,那么就可以半平面交了 Code: #include & ...
随机推荐
- 生成bat文件及sh文件
---windows下cmd执行java文件1.将project程序打成jar包2.新建文件夹--新建.bat文件3.bat文件内容:(config配置文件--lib用到的jar包,包括1的jar包) ...
- Linux vi 操作命令整理
转自:http://www.lupaworld.com/?uid-296380-action-viewspace-itemid-118973 vi/vim 基本使用方法 本文介绍了vi (vim) ...
- appium 常用api介绍(1)
前言:android手机大家都很熟悉,操作有按键.触摸.点击.滑动等,各种操作方法可以通过api的方法来实现. 参考博文:http://blog.csdn.net/bear_w/article/det ...
- CF721C. Journey[DP DAG]
C. Journey time limit per test 3 seconds memory limit per test 256 megabytes input standard input ou ...
- 洛谷P1126机器人搬重物[BFS]
题目描述 机器人移动学会(RMI)现在正尝试用机器人搬运物品.机器人的形状是一个直径1.6米的球.在试验阶段,机器人被用于在一个储藏室中搬运货物.储藏室是一个N*M的网格,有些格子为不可移动的障碍.机 ...
- Codevs1378选课[树形DP|两种做法(多叉转二叉|树形DP+分组背包)---(▼皿▼#)----^___^]
题目描述 Description 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的.学生选修 ...
- KSFramework常见问题:Excel如何进行SVN协作、差异比较?
Excel如何进行SVN协作.差异比较? 嗯,这是一个令人困惑的问题.游戏开发.程序开发时,使用Excel可以添加文档.注释.图标.批注等等各种辅助信息: 但是Excel是非纯文本格式,在使用SVN. ...
- 使用mx:Repeater在删除和添加item时列表闪烁
使用mx:Repeater在删除和添加item时列表闪烁 不可能在用户界面上闪闪的吧,recycleChildren属性可帮助我们 recycleChildren属性==缓存,设为true就可以了 本 ...
- jmeter 与 json
1.添加一个 http信息头管理: Add new value for Name = “Content-Type” and value = “application/json” (without qu ...
- Python的高级特性4:函数式编程
函数式编程的核心就是把函数当成对象来进行编程. 有两个常用到的方法:map/reduce,filter,其中map和filter是内建方法,而reduce不是,所以需要import相关模块. map接 ...