IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 1228. 油漆面积 (扫描线 线段树 模板 -> 正文阅读

[数据结构与算法]1228. 油漆面积 (扫描线 线段树 模板

添加链接描述

#include<bits/stdc++.h>
using namespace std;
const int N=1e4+9;
struct  node
{
    int x,y1,y2;
    int cover;
    bool operator <(const node &t)const{
        return x<t.x;
    }
}t[N*2];
struct segment
{
    int l,r;
    int cnt;
    int len;
    
}tr[N*8];
void build(int u,int l,int r){//把边建好
    if(l==r)tr[u]={l,r};
    else {
        int mid=l+r>>1;
        tr[u]={l,r};
        build(u*2,l,mid);
        build(u*2+1,mid+1,r);
    }
}
void pushup(int u){
    //如果当前点覆盖  把当前的线算出
    if(tr[u].cnt)tr[u].len=tr[u].r-tr[u].l+1;
    //如果是结点 则返回0
    else if(tr[u].l==tr[u].r)tr[u].len=0;
    //否则返回根等于子树的和
    else tr[u].len=tr[u*2].len+tr[u*2+1].len;
}
void modify(int u,int l,int r,int k){
    if(tr[u].l>=l&&tr[u].r<=r){
        //如果包括了 把当前的点修改
        tr[u].cnt+=k;
        pushup(u);//父节点修改
    }
    else {
        int mid=tr[u].l+tr[u].r>>1;
        if(l<=mid){
            modify(u*2,l,r,k);
        }
        if(r>mid)modify(u*2+1,l,r,k);
        pushup(u);
    }
}
int m;
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        int x1,y1,x2,y2;
        cin>>x1>>y1>>x2>>y2;
        t[++m]={x1,y1,y2,1};//当前入边
        t[++m]={x2,y1,y2,-1};//当前出边
    }
    // for(int i=1;i<=m;i++)cout<<t[i].x<<endl;
    sort(t+1,t+1+m);
    // for(int i=1;i<=m;i++)cout<<t[i].x<<endl;
    build(1,0,10000);//建立线段树
    int ans=0;
    for(int i=1;i<=m;i++){
        // cout<<t[i].x<<endl;
        if(i>1)ans+=tr[1].len*(t[i].x-t[i-1].x);
        modify(1,t[i].y1,t[i].y2-1,t[i].cover);//修改出边还是入边
        //y2-1是因为线段树不能重合
    }
    cout<<ans<<endl;

    return 0;
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 18:50:35  更:2022-03-30 18:51:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 11:28:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码