https://www.luogu.org/problemnew/show/P3875

线段树扫描线求矩形面积并

扫描线的线段树有点奇怪,修改的标记不会下传,标记的意义是当前区间被完整地覆盖了多少次,我们可以根据这个标记来求这个区间覆盖了至少一次的长度和至少两次的长度

:数组大小

#include <iostream>
#include <cstdio>
#include <algorithm>#define gc getchar()using std:: sort;
using std:: cout;
using std:: min;
using std:: max;
const int N = 10100;int n, js;
int X[N << 2], W[N << 4], F[N << 4];
struct Node {int x_1, x_2, h, how;} lp[N << 1];inline int read() {int x = 0; char c = gc;while(c < '0' || c > '9') c = gc;while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = gc;return x;
}inline void Add(int _x_1, int _y_1, int _x_2, int _y_2) {if(_y_1 == _y_2) {int _1 = _x_1, _2 = _x_2;_x_1 = min(_1, _2); _x_2 = max(_1, _2);lp[++ js].x_1 = _x_1; lp[js].x_2 = _x_2; lp[js].h = _y_1 - 1; lp[js].how = 1; X[js] = _x_1;lp[++ js].x_1 = _x_1; lp[js].x_2 = _x_2; lp[js].h = _y_1 + 1; lp[js].how = -1; X[js] = _x_2;} else {int _1 = _y_1, _2 = _y_2;_y_1 = min(_1, _2); _y_2 = max(_1, _2);lp[++ js].x_1 = _x_1 - 1; lp[js].x_2 = _x_1 + 1; lp[js].h = _y_1; lp[js].how = 1; X[js] = _x_1 - 1;lp[++ js].x_1 = _x_1 - 1; lp[js].x_2 = _x_1 + 1; lp[js].h = _y_2; lp[js].how = -1; X[js] = _x_1 + 1;}
}inline bool cmp(Node a, Node b) {return a.h < b.h;}int Find(int num, int r_) {int L = 1, R = r_, ret;while(L <= R) {int Mid = (L + R) >> 1;if(X[Mid] <= num) L = Mid + 1, ret = Mid;else R = Mid - 1;}return ret;
}#define lson jd << 1
#define rson jd << 1 | 1void Pushup(int jd, int l, int r) {if(F[jd]) W[jd] = X[r + 1] - X[l];else if(l == r) W[jd] = 0;else W[jd] = W[lson] + W[rson];
}void Sec_G(int l, int r, int jd, int x, int y, int how) {if(x <= l && r <= y) {F[jd] += how; Pushup(jd, l, r); return ;}int mid = (l + r) >> 1;if(x <= mid) Sec_G(l, mid, lson, x, y, how);if(y > mid)  Sec_G(mid + 1, r, rson, x, y, how);Pushup(jd, l, r);
}int main() {n = read();for(int i = 1; i <= n; i ++) {int x_1 = read(), y_1 = read(), x_2 = read(), y_2 = read();Add(x_1, y_1, x_2, y_2);}sort(X + 1, X + js + 1);sort(lp + 1, lp + js + 1, cmp);int k = 1;for(int i = 2; i <= js; i ++) if(X[i] != X[i + 1]) X[++ k] = X[i];long long Answer = 0;for(int i = 1; i < js; i ++) {int l = Find(lp[i].x_1, k), r = Find(lp[i].x_2, k) - 1;Sec_G(1, k - 1, 1, l, r, lp[i].how);Answer += W[1] * (lp[i + 1].h - lp[i].h);}cout << Answer;return 0;
}

转载于:https://www.cnblogs.com/shandongs1/p/8543201.html

[Luogu] 被污染的河流相关推荐

  1. [LUOGU] P3354 [IOI2005]Riv 河流

    题目描述 几乎整个Byteland王国都被森林和河流所覆盖.小点的河汇聚到一起,形成了稍大点的河.就这样,所有的河水都汇聚并流进了一条大河,最后这条大河流进了大海.这条大河的入海口处有一个村庄--名叫 ...

  2. Luogu P3354 [IOI2005]Riv河流 题解———再加一维!再加一维!

    Description n≤100,k≤min(n,50)n≤100,k≤min(n,50)n≤100,k≤min(n,50). Solution 考虑树形dpdpdp. 状态设计为dpi,jdp_{ ...

  3. 2023年第八届数维杯大学生数学建模挑战赛 A题 河流-地下水系统水体污染研究

    2023年第八届数维杯大学生数学建模挑战赛题目 (请先阅读"数维杯大学生数学建模挑战赛论文格式规范") 目录 问题1 通过查阅相关文献和资料,分析并建立河流-地下水系统中有机污染物 ...

  4. 2019年美国大学生数学建模竞赛(MCM/ICM) E题解题思路

    这也许是我大学生涯最后一次参加数学建模比赛了吧,这次我们选择的问题是E题,以下是我们解题时候的一些思路.很多不易体现的项目产生对环境造成影响的指标可以由一些等同类型的指标来代替,如土地.森林植被被破环 ...

  5. 手工制作机器人用彩泥_印度神奇芒果干制作过程,看一遍顶三遍,游客:不会再吃了...

    印度神奇芒果干制作过程,看一遍顶三遍,游客:不会再吃了 随着我国经济迅速发展,人们生活水平得到了很大提升,物质消费得到满足以后,人们更注重精神需求,希望通过旅游要开放视野,放松心情,让自己体验不同地域 ...

  6. 《娱乐至死》读书笔记

    <娱乐至死>读书笔记 将要进行思考的问题: 1 书中介绍了3个时代,分别是口述时代,印刷机时代和电视时代,各有什么特点? 2 如何一句话去理解书名的意义? 3 通过前面三个时期的总结,如何 ...

  7. GIS应用技巧之缓冲区分析

    一.缓冲区介绍 缓冲区是地理空间目标的一种影响范围或服务范围,是对选中的一组或一类地图要素(点.线或面)按设定的距离条件,围绕其要素而形成一定缓冲区多边形实体,从而实现数据在二维空间得以扩展的信息分析 ...

  8. [渝粤教育] 西北农林科技大学 成本会计学 参考 资料

    教育 -成本会计学-章节资料考试资料-西北农林科技大学[] 第一章单元测验 1.[单选题]产品成本是指企业为生产一定种类.一定产数量的产品所支出的各项( ). A.物化劳动和活劳动之和 B.生产经营管 ...

  9. 2023年数维杯A题河流-地下水系统水体污染研究思路

    河流对地下水有着直接地影响,当河流补给地下水时,河流一旦被污染,容易导 致地下水以及紧依河流分布的傍河水源地将受到不同程度的污染,这将严重影响 工农业的正常运作.社会经济的发展和饮水安全.在地下水污染 ...

  10. 河流检测matlab,基于MATLAB的河流突发性污染事故应急监测布点研究

    基于MATLAB的河流突发性污染事故应急监测布点研究 2 0 1 0年 7月 第 2 7卷第 7期 海洋开发与管理 J u l y 2 0 1 0 V0 1 .2 7 NO. 7 基于 MA T L ...

最新文章

  1. R语言ggplot2可视化小提琴图(violin plot)并使用ggsignif添加分组显著性(significance)标签
  2. SQL Server 2012笔记分享-48:备份时间线
  3. SAP UI5 应用开发教程之五十一 - 如何使用 Chrome 调试运行在手机上的 SAP UI5 Cordova 混合应用
  4. rhel6.9 yum安装mysql_在RHEL6.9上安装MySQL5.7
  5. LeetCode 1394. 找出数组中的幸运数(map计数)
  6. 安装、部署DPM 2012 R2服务器
  7. Go 如何利用multipart/form-data实现文件的上传与下载
  8. sql 从ip列表中查询ip段_IP地址段查询深度优化案例
  9. 13.MongoDB之Gridfs
  10. 计算机上找不到运行程序怎么办,电脑联网时显示找不到应用程序怎么办
  11. 江苏省小高考计算机考试,江苏省小高考考几门
  12. 计算机毕业设计 java餐厅点餐系统 餐厅管理系统 餐厅点餐系统java 餐厅预定系统 餐厅预订系统 点餐座位预定系统 餐厅后台管理系统 点餐系统 外卖点餐系统 springboot餐厅预约系统
  13. matlab用雅可比(Jacobi)迭代法求解方程组
  14. [转] 安卓巴士总结了近百个Android优秀开源项目,覆盖Android开发的每个领域
  15. 什么轴的机械键盘声音小
  16. 用Python做一个会旋转的五彩风筝
  17. 长度单位换算python_长度单位换算表-在线长度单位转换器
  18. □ 影片名:《拳霸2冬阴功》(20240) 在线播放
  19. Dapp区块链 | wireshark抓包2
  20. 干货|6个牛逼的基于Vue.js的后台控制面板,接私活必备

热门文章

  1. 1074 Reversing Linked List (25 分)
  2. 抖音上python有用吗_专栏 | 如何在抖音上找到漂亮小姐姐?这里有个Python抖音机器人...
  3. java dns 缓存_一次排查多线程引发Java DNS缓存的Bug
  4. dbcc checkdb 200g 要多久_东丽区无人驾驶学多久,放心省心_石家庄北方汽修学校
  5. 【HDU5869】Different GCD Subarray Query(求[L,R]内有多少个不同的区间gcd---树状数组+思维)
  6. 组件中使用_Cocos Creator中Button组件使用详解
  7. TL摄像头如何放到html去直播,使用flash插件来调用pc的摄像头如何将它嵌入到TML页面中...
  8. 极客大学架构师训练营 大数据架构、Spark、Flink、机器学习、PageRank算法、神经网络 第13次作业
  9. 32位电脑适合装W ndows10,32位再见?微软将停止支持32位Win10系统
  10. linux部署was找不到8879端口,WAS8.0与IHS集群安装与配置指导手册