#扫描线,线段树#洛谷 3875 [TJOI2010]被污染的河流
分析
矩阵面积并不是扫描线模板题吗
然后连题目都没仔细看就交了
发现它是一个线段向外扩展一个格子qwq
代码
#include <cstdio>
#include <cctype>
#include <algorithm>
#define rr register
using namespace std;
const int N=200011; long long ans;
struct rec{int x,l,r,w;}b[N];
int n,k,w[N<<2],lazy[N<<2],a[N];
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline void update(int k,int l,int r,int x,int y,int end){
if (l==x&&r==y){
lazy[k]+=end;
if (lazy[k]) w[k]=a[r+1]-a[l];
else if (l==r) w[k]=0;
else w[k]=w[k<<1]+w[k<<1|1];
return;
}
rr int mid=(l+r)>>1;
if (y<=mid) update(k<<1,l,mid,x,y,end);
else if (x>mid) update(k<<1|1,mid+1,r,x,y,end);
else update(k<<1,l,mid,x,mid,end),update(k<<1|1,mid+1,r,mid+1,y,end);
if (lazy[k]) w[k]=a[r+1]-a[l];
else w[k]=w[k<<1]+w[k<<1|1];
}
bool cmp(rec a,rec b){return a.x<b.x||(a.x==b.x&&a.w>b.w);}
signed main(){
for (rr int m=iut();m;--m){
rr int xa=iut(),ya=iut(),xb=iut(),yb=iut();
if (xa>xb) xa^=xb,xb^=xa,xa^=xb;
if (ya>yb) ya^=yb,yb^=ya,ya^=yb;
if (xa==xb){
b[++k]=(rec){xa-1,ya,yb,1},
b[++k]=(rec){xa+1,ya,yb,-1},
a[++n]=ya,a[++n]=yb;
}else{
b[++k]=(rec){xa,ya-1,yb+1,1},
b[++k]=(rec){xb,ya-1,yb+1,-1},
a[++n]=ya-1,a[++n]=yb+1;
}
}
sort(a+1,a+1+n),sort(b+1,b+1+k,cmp),n=unique(a+1,a+1+n)-a-1;
for (rr int i=1;i<k;++i){
rr int l=lower_bound(a+1,a+1+n,b[i].l)-a,
r=lower_bound(a+1,a+1+n,b[i].r)-a-1;
update(1,1,n,l,r,b[i].w),ans+=1ll*(b[i+1].x-b[i].x)*w[1];
}
return !printf("%lld",ans);
}
#扫描线,线段树#洛谷 3875 [TJOI2010]被污染的河流的更多相关文章
- 线段树 洛谷P3932 浮游大陆的68号岛
P3932 浮游大陆的68号岛 题目描述 妖精仓库里生活着黄金妖精们,她们过着快乐,却随时准备着迎接死亡的生活. 换用更高尚的说法,是随时准备着为这个无药可救的世界献身. 然而孩子们的生活却总是无忧无 ...
- [线段树]洛谷P5278 算术天才⑨与等差数列
题目描述 算术天才⑨非常喜欢和等差数列玩耍. 有一天,他给了你一个长度为n的序列,其中第i个数为a[i]. 他想考考你,每次他会给出询问l,r,k,问区间[l,r]内的数从小到大排序后能否形成公差为k ...
- 区间连续长度的线段树——洛谷P2894 [USACO08FEB]酒店Hotel
https://www.luogu.org/problem/P2894 #include<cstdio> #include<iostream> using namespace ...
- HDU 3642 - Get The Treasury - [加强版扫描线+线段树]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3642 Time Limit: 10000/5000 MS (Java/Others) Memory L ...
- 【BZOJ3958】[WF2011]Mummy Madness 二分+扫描线+线段树
[BZOJ3958][WF2011]Mummy Madness Description 在2011年ACM-ICPC World Finals上的一次游览中,你碰到了一个埃及古墓. 不幸的是,你打开了 ...
- HDU 3265/POJ 3832 Posters(扫描线+线段树)(2009 Asia Ningbo Regional)
Description Ted has a new house with a huge window. In this big summer, Ted decides to decorate the ...
- 【bzoj4491】我也不知道题目名字是什么 离线扫描线+线段树
题目描述 给定一个序列A[i],每次询问l,r,求[l,r]内最长子串,使得该子串为不上升子串或不下降子串 输入 第一行n,表示A数组有多少元素接下来一行为n个整数A[i]接下来一个整数Q,表示询问数 ...
- hdu1542 Atlantis(扫描线+线段树+离散)矩形相交面积
题目链接:点击打开链接 题目描写叙述:给定一些矩形,求这些矩形的总面积.假设有重叠.仅仅算一次 解题思路:扫描线+线段树+离散(代码从上往下扫描) 代码: #include<cstdio> ...
- P3722 [AH2017/HNOI2017]影魔(单调栈+扫描线+线段树)
题面传送门 首先我们把这两个贡献翻译成人话: 区间 \([l,r]\) 产生 \(p_1\) 的贡献当且仅当 \(a_l,a_r\) 分别为区间 \([l,r]\) 的最大值和次大值. 区间 \([l ...
- Codeforces 407E - k-d-sequence(单调栈+扫描线+线段树)
Codeforces 题面传送门 & 洛谷题面传送门 深感自己线段树学得不扎实-- 首先特判掉 \(d=0\) 的情况,显然这种情况下满足条件的区间 \([l,r]\) 中的数必须相同,双针扫 ...
随机推荐
- SVN培训笔记(下拉项目、同步修改、添加文件、修改文件、删除文件、改名文件等)
前言 为了方便新加入团队的员工熟悉团队协作开发. 为了将好东西整理分享给有需要的网友. 将SVN内部员工培训文档公开,以方便更多的人,提高知识获取速度,尽快熟悉协同开发. 本文档培训员工对于 ...
- 项目实战:Qt数据分析处理平台(兼容各国产麒麟系统)(文件域字符串解析,上万文件批量导入,折线图、散点图,正态分布图分析处理导出等)
若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/114710650长期持续带来更多项目与技术分享, ...
- 对于Celery原理的简单理解
参考博客: https://www.cnblogs.com/forward-wang/p/5970806.html https://blog.csdn.net/cuomer/article/detai ...
- C#/.NET/.NET Core优秀项目和框架2024年2月简报
前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍.功能特点.使用方式以及部分功能截图 ...
- 1. Canal入门
1. Canal简介 官方文档: https://github.com/alibaba/canal/wiki/简介 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求.早期 ...
- 掌握pandas cut函数,一键实现数据分类
pandas中的cut函数可将一维数据按照给定的区间进行分组,并为每个值分配对应的标签.其主要功能是将连续的数值数据转化为离散的分组数据,方便进行分析和统计. 1. 数据准备 下面的示例中使用的数据采 ...
- Django 初步使用
Django 框架系列 目录 Django 框架系列 一. 安装启用 1.1 主流web框架概述 1.2 安装版本 1.3 启动的两种方式 1)命令行创建 2)pycharm创建 3)两种方式的区别 ...
- 新博客 VuejsDev.com 用于梳理知识点
新博客 VuejsDev.com 用于梳理知识点 https://www.vuejsdev.com/ 后期没有精力发布了,迁移到博客园了,防止服务器到期~ [VueJsDev] 目录列表 https: ...
- bounties 赏金 bon = good 来自法语 bonjour 早上好
bounties 赏金 bon = good 来自法语 bonjour 早上好
- vim没有clipboard,没法复制到系统剪切板,通过xclip将复制、删除的内容放到系统剪切板
解决方法:在/etc/vim/vimrc 或者 ~/.vimrc 中添加下面的命令 au TextYankPost * exe system("xclip -selection clipbo ...