2017 ACM/ICPC 南宁区 网络赛 Overlapping Rectangles
2017-09-24 20:11:21
writer:pprp
找到的大神的代码,直接过了
采用了扫描线+线段树的算法,先码了,作为模板也不错啊
题目链接:https://nanti.jisuanke.com/t/17313
题意:给你很多个矩形,让你得到矩形的面积,重叠部分只算一次
代码如下:
- //ac F
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <iostream>
- #include <algorithm>
- using namespace std;
- typedef long long ll;
- const int maxn=1e6+;
- #define mm(a) memset(a,0,sizeof(a))
- int num1[maxn*];
- int num[maxn*],X[maxn*];
- struct edge
- {
- int l,r,h;
- int s;//s为1是下边,s为-1是上边
- edge() {};
- edge(int a,int b,int c,int d) : l(a),r(b),h(c),s(d) {}
- bool operator<(const edge &n)const
- {
- return h<n.h;
- }
- } ss[maxn];
- void pushup(int le,int ri,int node)
- {
- if(num1[node])
- num[node]=X[ri+]-X[le];//在更新的时候,可能两个矩阵有重叠,这样就不能像以前那么更新,而是将le和ri传入
- else if(le==ri)
- num[node]=; //然后将X[ri+1]-X[le]的值进行更新,避免了重复的长度
- else
- num[node]=num[node<<]+num[node<<|];
- }
- void update(int l,int r,int add,int le,int ri,int node)
- {
- if(l<=le&&ri<=r)
- {
- num1[node]+=add;//与懒惰标记类似
- pushup(le,ri,node);
- return ;
- }
- int t=(le+ri)>>;
- if(l<=t) update(l,r,add,le,t,node<<);
- if(r>t) update(l,r,add,t+,ri,node<<|);
- pushup(le,ri,node);
- }
- int main()
- {
- int n;
- while(scanf("%d",&n) != EOF)
- {
- if(n == )
- {
- cout << "*" << endl;
- break;
- }
- int a,b,c,d;
- int k=;
- for(int i=; i<n; i++)
- {
- scanf("%d%d%d%d",&a,&b,&c,&d);
- X[k]=a;
- ss[k++]=edge(a,c,b,);
- X[k]=c;
- ss[k++]=edge(a,c,d,-);
- }
- sort(X,X+k);
- sort(ss,ss+k);
- int k1=;
- for(int i=; i<k; i++) //对X进行离散化
- {
- if(X[i]!=X[i-]) X[k1++]=X[i];
- }
- mm(num);
- mm(num1);
- int ans=;
- for(int i=; i<k-; i++)
- {
- int l=lower_bound(X,X+k1,ss[i].l)-X;
- int r=lower_bound(X,X+k1,ss[i].r)-X-;
- update(l,r,ss[i].s,,k1-,);
- ans+=num[]*(ss[i+].h-ss[i].h);//num[1]为当前横坐标的总长度
- }
- cout << ans << endl;
- }
- return ;
- }
2017 ACM/ICPC 南宁区 网络赛 Overlapping Rectangles的更多相关文章
- 【2017 ACM/ICPC 乌鲁木齐赛区网络赛环境测试赛 E】蒜头君的排序
[链接]h在这里写链接 [题意] 在这里写题意 [题解] 莫队算法+树状数组. 区间增加1或减少1. 对逆序对的影响是固定的. (用冒泡排序变成升序的交换次数,就是逆序对的个数) [错的次数] 0 [ ...
- 2017ICPC南宁赛区网络赛 Overlapping Rectangles(重叠矩阵面积和=离散化模板)
There are nnn rectangles on the plane. The problem is to find the area of the union of these rectang ...
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 M. Frequent Subsets Problem【状态压缩】
2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 M. Frequent Subsets Problem 题意:给定N和α还有M个U={1,2,3,...N}的子集,求子集X个数,X满足:X是U ...
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 Overlapping Rectangles
There are nn rectangles on the plane. The problem is to find the area of the union of these rectangl ...
- 2014 ACM/ICPC 鞍山赛区网络赛(清华命题)
为迎接10月17号清华命题的鞍山现场赛 杭电上的题目 Biconnected(hdu4997) 状态压缩DP Rotate(hdu4998) 相对任一点的旋转 Overt(hdu4999 ...
- 2017 ACM - ICPC Asia Ho Chi Minh City Regional Contest
2017 ACM - ICPC Asia Ho Chi Minh City Regional Contest A - Arranging Wine 题目描述:有\(R\)个红箱和\(W\)个白箱,将这 ...
- 2017 ACM/ICPC Asia Regional Shenyang Online spfa+最长路
transaction transaction transaction Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 132768/1 ...
- 2017 ACM ICPC Asia Regional - Daejeon
2017 ACM ICPC Asia Regional - Daejeon Problem A Broadcast Stations 题目描述:给出一棵树,每一个点有一个辐射距离\(p_i\)(待确定 ...
- 2017 ACM/ICPC Shenyang Online SPFA+无向图最长路
transaction transaction transaction Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 132768/1 ...
随机推荐
- 剑指Offer——二叉搜索树的后序遍历序列
题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 分析: 二叉查找树(Binary Search ...
- What’s wrong with virtual methods called through an interface
May 31, 2016 Calling a virtual method through an interface always was a lot slower than calling a st ...
- java基础07 循环结构
public class While02 { public static void main(String[] args) { /** * while(循环条件){ * 循环体(循环操作) * } * ...
- python常见模块之random模块
import random print(random.random()) #随机产生一个0-1之间的小数 print(random.randint(1,3)) #随机产生一个1-3之间的整数,包括1和 ...
- ftp 服务器搭建
一.安装 yum -y install vsftpd //通过yum来安装vsftpd chkconfig vsftpd on //设置为开机启动 vi /etc/vsftpd/vsftpd.conf ...
- python web框架 django 工程 创建 目录介绍
# 创建Django工程django-admin startproject [工程名称] 默认创建django 项目都会自带这些东西 django setting 配置文件 django可以配置缓存 ...
- 宏表达式与函数、#undef、条件编译、
宏表达式在预编译期被处理,编译器不知道宏表达式的存在. 宏表达式没有任何的调用开销 宏表达式中不能出现递归定义. C语言中强大的内置宏 __FILE__:被编译的文件名 //双底线 __LINE__: ...
- 闪回事务(Flashback Transaction)
到目前为止,介绍的所有功能均不会直接将数据恢复为“以前”的样子.闪回查询只是查看,闪回数据归档只是延伸了闪回查询的时间窗口,闪回事务查询虽然提供了撤销SQL,但是否执行及如何执行还需要管理员进一步手动 ...
- web Servlet 3.0 新特性之web模块化编程,web-fragment.xml编写及打jar包
web Servlet 3.0 模块化 原本一个web应用的任何配置都需要在web.xml中进行,因此会使得web.xml变得很混乱,而且灵活性差,因此Servlet 3.0可以将每个Servlet. ...
- C++基础之头文件和源文件的关系
今天找了个解析xml的开源C++项目tinyxml,按照网上的说法去编译,但是一直编译不通过,"无法打开头文件tinyxml.h",但是明明我在工程底下有了这个文件,对于我这种初学 ...