luogu1856 [USACO5.5]矩形周长Picture
看到一坨矩形就要想到扫描线。(poj atantis)
我们把横边竖边分开计算,因为横边竖边其实没有区别,以下论述全为考虑竖边的。
怎样统计一个竖边对答案的贡献呢?答:把这个竖边加入线段树,当前的总覆盖长度 减去 加入前的总覆盖长度 的绝对值 即为这个竖边的贡献。
这样做有一个要求,横坐标相同的竖边,要先加进去入边再删掉出边。(为什么呢?考虑两个矩形,一个矩形的右边和另一个矩形的左边的横坐标相同但上下错落)
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int n, qwq1, pwp1, qwq2, pwp2, cnt, m, num[20005], ans;
struct Line{
int uu, vv, ww, id;
}li1[10005], li2[10005];
bool cmp(Line x, Line y){
if(x.uu!=y.uu) return x.uu<y.uu;
else return x.id>y.id;
}
struct SGT{
int sum[80005], len[80005];
void update(int o, int l, int r, int x, int y, int k){
if(num[l]>=x && num[r]<=y) sum[o] += k;
else{
int mid=(l+r)>>1;
int lson=o<<1;
int rson=lson|1;
if(x<num[mid]) update(lson, l, mid, x, y, k);
if(num[mid]<y) update(rson, mid, r, x, y, k);
}
if(sum[o]>0) len[o] = num[r] - num[l];
else if(l+1==r) len[o] = 0;
else len[o] = len[o<<1] + len[(o<<1)|1];
}
}sgt;
int main(){
cin>>n;
for(int i=-10000; i<=10000; i++) num[++m] = i;
for(int i=1; i<=n; i++){
scanf("%d %d %d %d", &qwq1, &pwp1, &qwq2, &pwp2);
cnt++;
li1[cnt] = (Line){qwq1, pwp1, pwp2, 1};
li2[cnt] = (Line){pwp1, qwq1, qwq2, 1};
cnt++;
li1[cnt] = (Line){qwq2, pwp1, pwp2, -1};
li2[cnt] = (Line){pwp2, qwq1, qwq2, -1};
}
sort(li1+1, li1+1+cnt, cmp);
sort(li2+1, li2+1+cnt, cmp);
for(int i=1; i<=cnt; i++){
int lst=sgt.len[1];
sgt.update(1, 1, m, li1[i].vv, li1[i].ww, li1[i].id);
ans += abs(sgt.len[1]-lst);
}
for(int i=1; i<=cnt; i++){
int lst=sgt.len[1];
sgt.update(1, 1, m, li2[i].vv, li2[i].ww, li2[i].id);
ans += abs(sgt.len[1]-lst);
}
cout<<ans<<endl;
return 0;
}
luogu1856 [USACO5.5]矩形周长Picture的更多相关文章
- Luogu1856 [USACO5.5]矩形周长Picture (线段树扫描线)
对于横轴,加上与上一次扫描的差值:对于竖轴,加上高度差与区间内不相交线段\(*2\)的积: 难点在pushdown,注意维护覆盖关系.再就注意负数 #include <iostream> ...
- P1856 [USACO5.5]矩形周长Picture
P1856 [USACO5.5]矩形周长Picture $len$ $sum$ $num$ $flag\_l$ $flage\_ ...
- P1856 [USACO5.5]矩形周长Picture[扫描线]
题目背景 墙上贴着许多形状相同的海报.照片.它们的边都是水平和垂直的.每个矩形图片可能部分或全部的覆盖了其他图片.所有矩形合并后的边长称为周长. 题目描述 编写一个程序计算周长. 如图1所示7个矩形. ...
- 洛谷P1856 [USACO5.5]矩形周长Picture
题目背景 墙上贴着许多形状相同的海报.照片.它们的边都是水平和垂直的.每个矩形图片可能部分或全部的覆盖了其他图片.所有矩形合并后的边长称为周长. 题目描述 编写一个程序计算周长. 如图1所示7个矩形. ...
- luogu P1856 [USACO5.5]矩形周长Picture 扫描线 + 线段树
Code: #include<bits/stdc++.h> #define maxn 200007 #define inf 100005 using namespace std; void ...
- [USACO5.5] 矩形周长Picture
https://www.luogu.org/problemnew/show/P1856 1.每个矩形由两条横向边和两条纵向边组成. 2.对于横向边,按纵坐标排序.设当前讨论的边为 A [s , t] ...
- Luogu P1856 [USACO5.5]矩形周长Picture
线段树+扫描线 经典的扫描线问题 首先将一个矩形看作由竖着的两条边和横着的两条边构成 那分成两次考虑,一次考虑竖边,一次考虑横边 首先考虑横边 如图两个矩形,现将横边擦去,留下竖边,将平面划分成3个区 ...
- [题解]P1856 [USACO5.5]矩形周长Picture
Loli 考试的题目之一 题目地址 \(N^2\)做法 #include <cstdio> #include <cstring> #define re register #de ...
- 「USACO5.5」矩形周长Picture
题目描述 墙上贴着许多形状相同的海报.照片.它们的边都是水平和垂直的.每个矩形图片可能部分或全部的覆盖了其他图片.所有矩形合并后的边长称为周长. 编写一个程序计算周长. 如图1所示7个矩形. 如图2所 ...
随机推荐
- Mice and Holes CodeForces - 797F
Mice and Holes CodeForces - 797F 题意:有n只老鼠和m个洞,都在一个数轴上,老鼠坐标为x[1],...,x[n],洞的坐标为p[1],...,p[m],每个洞能容纳的老 ...
- Codeforces Round #322 (Div. 2)
水 A - Vasya the Hipster /************************************************ * Author :Running_Time * C ...
- 线段树(单点更新) POJ 2886 Who Gets the Most Candies?
题目传送门 #include <cstdio> #include <cstring> #define lson l, m, rt << 1 #define rson ...
- 题解报告:hdu 6441 Find Integer(费马大定理+智慧数)
Problem Description people in USSS love math very much, and there is a famous math problem .give you ...
- Angular4项目,默认的package.json创建及配置
1.使用如下命令,可以创建一个默认的 package.json npm init 创建后如下图所示: 添加 angular4 的 dependencies: npm install@ ...
- Sublime Text 3列编辑
Sublime Text 3 的列编辑方式如下 1.使用鼠标 (Ubuntu 14.04验证通过) 不同的平台要使用不同的鼠标按钮: 1.1 OS X 鼠标左键 + Option 或: 鼠标中键 添加 ...
- Spark MLlib编程API入门系列之特征提取之主成分分析(PCA)
不多说,直接上干货! 主成分分析(Principal Component Analysis,PCA), 将多个变量通过线性变换以选出较少个数重要变量的一种多元统计分析方法. 参考 http://blo ...
- Android设计模式——MVP
一.什么是MVP MVP:全称 Model-View-Presenter. MVP框架由3部分组成:View层负责显示,Presenter层负责逻辑处理,Model层提供数据. View:负责绘制UI ...
- 修改他人电脑的Windows登录密码
在别人电脑已登录Windows的情况下: 打开控制面板 -> 管理工具 -> 计算机管理 或者 对Win图标单击右键 -> 计算机管理 -> 本地用户和组 -> 用 ...
- IOS文件下载
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, ...