热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

POJ2482:窗口中的星星——基于线段树、离散化与扫描线算法的优化解决方案

题目描述非常吸引人。每颗星星可以通过其在窗口的左下角和右上角位置构建两条扫描线,从而将问题转化为区间增减和求最大值的操作。需要注意的是,位于边界的星星不应计入结果,因此在处理时应分别对左右边界进行适当的增减调整。此外,利用线段树和离散化技术可以显著提高算法效率,确保在大规模数据下的性能表现。

题面据说很美~

每个星星可以根据在窗口的左下角和右上角两个位置建立两条扫描线,之后就是简单的区间增减和求最大值操作了。

注意要处理在边界上的星星是不算的情况,其实只要把左右边界分别增减一个eps即可。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

#define MP make_pair
#define PB push_back
#define lson rt <<1,l,mid
#define rson rt <<1 | 1,mid + 1,r
typedef long long LL;
typedef unsigned long long ULL;
typedef vector VI;
typedef pair pii;
const int INF = INT_MAX / 3;
const double eps = 1e-4;
const LL LINF = 1e17;
const double DINF = 1e60;
const int maxn = 1e5 + 5;

struct Seg {
    double x,l,r;
    int cover;
    Seg(double x,double l,double r,int cover): x(x),l(l),r(r),cover(cover) {}
    bool operator <(const Seg &s) const {
        return x  s;
vector numy;
LL lazy[maxn <<2],maxv[maxn <<2];
int W,H,n;

void add_line(int x,int y,int cover) {
    double x1 = x - W + eps, x2 = x - eps, y1 = y - H + eps, y2 = y - eps;
    s.PB(Seg(x1,y1,y2,cover));
    s.PB(Seg(x2,y1,y2,-cover));
    numy.PB(y1); numy.PB(y2);
}

int getID(double Val) {
    return lower_bound(numy.begin(),numy.end(),Val) - numy.begin();
}

void pushdown(int rt,int l,int r) {
    if(lazy[rt] == 0) return;
    int lc = rt <<1,rc = rt <<1 | 1;
    lazy[lc] += lazy[rt]; lazy[rc] += lazy[rt];
    maxv[lc] += lazy[rt]; maxv[rc] += lazy[rt];
    lazy[rt] = 0;
}

void pushup(int rt,int l,int r) {
    maxv[rt] = max(maxv[rt <<1] ,maxv[rt <<1 | 1]);
}

void update(int rt,int l,int r,int ql,int qr,int Val) {
    if(ql <= l && qr >= r) {
        lazy[rt] += Val;  maxv[rt] += Val;
    }
    else {
        pushdown(rt,l,r);
        int mid = (l + r) >> 1;
        if(ql <= mid) update(lson,ql,qr,Val);
        if(qr > mid) update(rson,ql,qr,Val);
        pushup(rt,l,r);
    }
}

void solve() {
    sort(numy.begin(),numy.end());
    sort(s.begin(),s.end());
    int ks = s.size(), ky = numy.size();
    LL ans = 0;
    for(int i = 0;i 

POJ 2482 Stars in Your Window 线段树+离散化+扫描线,,

POJ 2482 Stars in Your Window 线段树+离散化+扫描线


推荐阅读
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • Windows操作系统提供了Encrypting File System (EFS)作为内置的数据加密工具,特别适用于对NTFS分区上的文件和文件夹进行加密处理。本文将详细介绍如何使用EFS加密文件夹,以及加密过程中的注意事项。 ... [详细]
  • 1#include2#defineM1000103#defineRGregister4#defineinf0x3f3f3f3f5usingnamespacestd;6boolrev ... [详细]
  • 题目编号:2049 [SDOI2008]Cave Exploration。题目描述了一种动态图操作场景,涉及三种基本操作:断开两个节点间的连接(destroy(a,b))、建立两个节点间的连接(connect(a,b))以及查询两节点是否连通(query(a,b))。所有操作均确保图中无环存在。 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 本文详细介绍了C++中的构造函数,包括其定义、特点以及如何通过构造函数进行对象的初始化。此外,还探讨了转换构造函数的概念及其在不同情境下的应用,以及如何避免不必要的隐式类型转换。 ... [详细]
  • 数据类型--char一、char1.1char占用2个字节char取值范围:【0~65535】char采用unicode编码方式char类型的字面量用单引号括起来char可以存储一 ... [详细]
  • 本文详细介绍了iOS应用的生命周期,包括各个状态及其转换过程中的关键方法调用。 ... [详细]
  • 项目风险管理策略与实践
    本文探讨了项目风险管理的关键环节,包括风险管理规划、风险识别、风险分析(定性和定量)、风险应对策略规划及风险控制。旨在通过系统的方法提升项目成功率,减少不确定因素对项目的影响。 ... [详细]
  • 探索AI智能机器人自动盈利系统的构建
    用户可通过支付198元押金及30元设备维护费租赁AI智能机器人,推荐他人加入可获得相应佣金。随着推荐人数的增加,用户将逐步解锁更高版本,享受更多收益。 ... [详细]
  • 回顾两年前春节期间的一个个人项目,该项目原本计划参加竞赛,但最终作为练习项目完成。独自完成了从编码到UI设计的全部工作,尽管代码量不大,但仍有一定的参考价值。本文将详细介绍该项目的背景、功能及技术实现。 ... [详细]
  • 本文将详细介绍如何在二进制和十六进制之间进行准确的转换,并提供实际的代码示例来帮助理解这一过程。 ... [详细]
  • 材料光学属性集
    材料光学属性集概述了材料在不同光谱下的光学行为,包括可见光透射率、太阳光透射率等关键参数。 ... [详细]
  • 在 Django 模型中,ForeignKey 的 on_delete 参数定义了当关联对象被删除时,当前模型实例的行为。本文详细解释了 on_delete 的各个选项及其具体作用。 ... [详细]
  • 本文提供了《汇编语言 第3版》中检测点11.2的详细参考答案,包括了各指令执行后的状态标志分析。 ... [详细]
author-avatar
手机用户2502873667
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有