「洛谷1884」「USACO12FEB」过度种植【离散化扫描线】
题目链接
题解
矩阵面积的并模板。(请求洛谷加为模板题)
很明显是要离散化的。
我们将矩阵与\(x\)轴平行的两个线段取出来。并且将这两个端点的\(x1\)和\(x2\)进行离散化。
因为每一次我们都会对当前的这一层的某一段线段进行操作,那么就用权值线段树维护是否存在。
这个只是矩阵面积的并。
还有加强版:【HDU 1542】
还有矩阵面积的交。
代码
#include <bits/stdc++.h>
#define gc getchar
#define lc (nod << 1)
#define rc (nod << 1 | 1)
using namespace std;
typedef long long ll;
const int N = 2003;
template <typename T> void read(T &x) {
x = 0; T fl = 1; char c = 0;
for (; c < '0' || c > '9'; c = gc())
if (c == '-') fl = -1;
for (; c >= '0' && c <= '9'; c = gc())
x = (x << 1) + (x << 3) + (c ^ 48);
x *= fl;
}
struct E{ int l, r, h, d; } ed[N * 2];
bool cmp_sl(E x, E y) { return x.h < y.h; }
ll ans = 0ll;
int n, dcnt;
int disc[N];
struct seg { ll s, tag; } tr[N << 2];
void pushup(int nod, int l, int r) {
if (tr[nod].tag) tr[nod].s = disc[r + 1] - disc[l];
else if (l == r) tr[nod].s = 0;
else tr[nod].s = tr[lc].s + tr[rc].s;
}
void upd(int nod, int l, int r, int ql, int qr, int val) {
if (ql <= l && r <= qr) {
tr[nod].tag += val;
pushup(nod, l, r);
return;
}
int mid = (l + r) >> 1;
if (ql <= mid) upd(lc, l, mid, ql, qr, val);
if (qr > mid) upd(rc, mid + 1, r, ql, qr, val);
pushup(nod, l, r);
}
int main() {
read(n);
for (int i = 1, x1, y1, x2, y2; i <= n; i ++) {
read(x1); read(y1); read(x2); read(y2);
disc[++ dcnt] = x1; ed[dcnt] = (E){x1, x2, y1, 1};
disc[++ dcnt] = x2; ed[dcnt] = (E){x1, x2, y2, -1};
}
sort(disc + 1, disc + 1 + dcnt);
sort(ed + 1, ed + 1 + dcnt, cmp_sl);
int m = unique(disc + 1, disc + 1 + dcnt) - disc - 1;
for (int i = 1; i < dcnt; i ++) {
int l = lower_bound(disc + 1, disc + 1 + m, ed[i].l) - disc;
int r = lower_bound(disc + 1, disc + 1 + m, ed[i].r) - disc;
if (l < r) upd(1, 1, m, l, r - 1, ed[i].d);
ans += tr[1].s * (ed[i + 1].h - ed[i].h);
}
cout << ans << endl;
return 0;
}
「洛谷1884」「USACO12FEB」过度种植【离散化扫描线】的更多相关文章
- 「区间DP」「洛谷P1043」数字游戏
「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME ...
- 「 洛谷 」P2768 珍珠项链
珍珠项链 题目限制 内存限制:125.00MB 时间限制:1.00s 标准输入输出 题目知识点 动态规划 \(dp\) 矩阵 矩阵乘法 矩阵加速 矩阵快速幂 题目来源 「 洛谷 」P2768 珍珠项链 ...
- 「 洛谷 」P4539 [SCOI2006]zh_tree
小兔的话 推荐 小兔的CSDN [SCOI2006]zh_tree 题目限制 内存限制:250.00MB 时间限制:1.00s 标准输入输出 题目知识点 思维 动态规划 \(dp\) 区间\(dp\) ...
- 「 洛谷 」P2151 [SDOI2009]HH去散步
小兔的话 欢迎大家在评论区留言哦~ HH去散步 题目限制 内存限制:125.00MB 时间限制:1.00s 标准输入 标准输出 题目知识点 动态规划 \(dp\) 矩阵 矩阵乘法 矩阵加速 矩阵快速幂 ...
- 「P4994」「洛谷11月月赛」 终于结束的起点(枚举
题目背景 终于结束的起点终于写下句点终于我们告别终于我们又回到原点…… 一个个 OIer 的竞赛生涯总是从一场 NOIp 开始,大多也在一场 NOIp 中结束,好似一次次轮回在不断上演.如果这次 NO ...
- Solution -「CTS 2019」「洛谷 P5404」氪金手游
\(\mathcal{Description}\) Link. 有 \(n\) 张卡牌,第 \(i\) 张的权值 \(w_i\in\{1,2,3\}\),且取值为 \(k\) 的概率正比于 \ ...
- 「洛谷4197」「BZOJ3545」peak【线段树合并】
题目链接 [洛谷] [BZOJ]没有权限号嘤嘤嘤.题号:3545 题解 窝不会克鲁斯卡尔重构树怎么办??? 可以离线乱搞. 我们将所有的操作全都存下来. 为了解决小于等于\(x\)的操作,那么我们按照 ...
- 「洛谷3338」「ZJOI2014」力【FFT】
题目链接 [BZOJ] [洛谷] 题解 首先我们需要对这个式子进行化简,否则对着这么大一坨东西只能暴力... \[F_i=\sum_{j<i} \frac{q_iq_j}{(i-j)^2}-\s ...
- 「BZOJ2733」「洛谷3224」「HNOI2012」永无乡【线段树合并】
题目链接 [洛谷] 题解 很明显是要用线段树合并的. 对于当前的每一个连通块都建立一个权值线段树. 权值线段树处理操作中的\(k\)大的问题. 如果需要合并,那么就线段树暴力合并,时间复杂度是\(nl ...
随机推荐
- OPC协议解析-OPC客户端与服务器通讯解析
1 OPC服务器 OPC服务器, 是指按照OPC基金组织规定的OPC规范群开发的软件驱动.OPC服务器作为中间媒介负责从数据源读取数据再跟另外一端的客户端通信.在 OPC客户端/服务器 的结 ...
- TortoiseSVN 安装时出现 please install the universal crt
解决步骤: 1.打开 https://www.microsoft.com/zh-cn/ 2.搜索 universal crt (hotfix kb2999226) 3.点击链接 4.选择适合自己的版本 ...
- 基础环境系列:MySQL8.0.12
机型与版本:windows10(64-bits) Mysql环境配置:mysql8.0.12 一.MySQL安装 Mysql的安装有两种方法,一种是通过.msi一种是通过压缩包.穷呢,大家就老实下社区 ...
- 使用VBScript 脚本 开机播放声音
前言:环境Window 10 第一步写一个 VBScript 脚本 新建一个文本文档,将下面的代码复制到文本文档中,Ctrl+S保存 将文本文档的.txt 后缀 改为.vbs即可 最后,双击这个 vb ...
- 【公众号系列】两分钟学会SAP F1技巧
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[公众号系列]两分钟学会SAP F1技巧 写 ...
- Linux 用户关联命令
在执行useradd命令创建用户时,它首先读取/etc/default/useradd文件的配置参数,然后通过这些参数来配置新创建的用户,如创建名为luser的用户. [root@rhl5 -]# u ...
- C# groupby 应用小技巧
这两天感冒了,导致大脑无法有效运转,一个朋友问我,groupby 怎么给list 分组,然后再将其中一个字段组合起来,恩,觉得很简单,结果才发现,自己的脑子真的是不够用了: 恩,其实是想写其他的,但是 ...
- MySql 学习之路-Date函数
MySQL中重要的内建函数 函数 描述 NOW() 返回当前的日期和时间 NOW() 返回当前的日期和时间. 语法 NOW() -- 实例 -- 下面是 SELECT 语句: SELECT NOW() ...
- jdbc链接数据库
JDBC简介 JDBC全称为:Java Data Base Connectivity (java数据库连接),可以为多种数据库提供填统一的访问.JDBC是sun开发的一套数据库访问编程接口,是一种SQ ...
- Docker(3):Dockerfile配置详解
FROM : 指定base镜像 MAINTAINER :设置镜像的作者,可以是任意的字符串 COPY :将文件从build context 复制到镜像 COPY 支持两种形式:COPY src ...