hdu 5091 Beam Cannon(线段树) 矩形覆盖最多点

《实战指南 | MES业务顾问蓝图设计方案:避免90%项目踩坑,从战略到落地的全攻略》 《MES业务顾问蓝图设计方案》干货分享:制造业高管常遇MES系统沦为"摆设"的困境,根源在于蓝图设计阶段未抓准业务痛点。本文系统梳理了6大关键点:1)战略定位上承ERP下接设备;2)通过现场蹲点挖掘真实需求;3)构建可扩展技术架构;4)建立数据闭环管理;5)组织保障分步实施;6)持续量化KPI优化。方案强调从业务价值出发,避免"纸上谈兵",通过数据驱动实现"计划-执行-反馈"闭环,最终让MES成为企业数字化的核心资产。 阅读详情

参考:http://blog.youkuaiyun.com/u013654696/article/details/40712519
给出n个点和一个矩形的长和宽, 问这个矩形最多能覆盖多少个点。

矩形放的最优方案一定存在一种是左边界或者右边界上有点,假设是左边界上有点, 就可以枚举左边界上的是哪个点, 也就是从左向右扫, 假设扫到了第i个点, 那么在第i个点右边并且x坐标距离小于w的点j, 如果矩形的上边界在a[j].y 和a[j].y + h之间的话, 那么矩形就可以覆盖这个点, 所以每个点都是对a[j].y 和a[j].y + h这段区间加1, 然后答案就是整个区间的最大值, 用线段树维护就可以了。。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <map>
#include <string>
#include <set>
#include <cstdlib>
#include <algorithm>
using namespace std;

#define mnx 20002
#define N 3020
#define E 1000200
#define inf 0x3f3f3f3f
#define ls (p[i].ch[0])
#define rs (p[i].ch[1])
#define md ((ll + rr) >> 1)
const int M = 10000000;



bool acc[mnx][11];
int pen[mnx][11]; // 未提交时候的罚时
int lst[mnx];
int cnt[mnx]; // 总罚时
int lstacc[mnx];

int n, k;

struct ff {
    bool operator()(const int &a, const int &b) const{
        if(lstacc[a] == -1 && lstacc[b] == -1) return a < b;
        if(lstacc[a] == -1 || lstacc[b] == -1) return lstacc[b] == -1;
        return lstacc[a] < lstacc[b];
    }
};
struct node {
    int ch[2], r, s, v, cnt;
    set<int, ff> vv;
    node() {}
    void setIt(int v, int id) {
        this -> v = v;
        vv.clear();
        vv.insert(id);
        ch[0] = ch[1] = 0, r = rand(), s = 1;
        cnt = 1;
    }
}p[mnx * 22];
int sz;
int creat(int v, int id) {
    ++ sz;
    p[sz].setIt(v, id);
    return sz;
}
int cmp(int i, int v) {
    if(p[i].v == v) return -1;
    return v < p[i].v? 0: 1;
}
void mt(int i) {
    p[i].s = p[i].cnt;
    if(ls) p[i].s += p[ls].s;
    if(rs) p[i].s += p[rs].s;
}
void rt(int &i, int d) {
    int k = p[i].ch[d^1];
    p[i].ch[d^1] = p[k].ch[d];
    p[k].ch[d] = i;
    mt(i), mt(k);
    i = k;
}
void ins(int &i, int id, int v) {
    if(!i) {
        i = creat(v, id);
        return;
    }
    int d = cmp(i, v);
    if(d == -1) {
        p[i].cnt ++, p[i].s++;
        p[i].vv.insert(id);
        return;
    }
    ins(p[i].ch[d], id, v);
    if(p[p[i].ch[d]].r > p[i].r)
        rt(i, d ^ 1);
    mt(i);
}
set<int, ff>::iterator it;
void Remove(int &i, int id, int v) {
    int d = cmp(i, v);
    if(d == -1) {
        if(p[i].cnt > 1) {
            p[i].cnt--, p[i].s--;
            p[i].vv.erase(id);
            return;
        }
        if(!ls) i = rs;
        else if(!rs) i = ls;
        else {
            int d2 = p[ls].r > p[rs].r? 1: 0;
            rt(i, d2);
            Remove(p[i].ch[d2], id, v);
        }
    }
    else Remove(p[i].ch[d], id, v);
    if(i) mt(i);
}
int kth(int i, int k) {
    if(!i) return -1;
    int d = k - p[ls].s;
    if(d <= 0) return kth(ls, k);
    if(d <= p[i].cnt) {
        if(d != 1) return -1;
        return *(p[i].vv.begin());
    }
    return kth(rs, d - p[i].cnt);
}
int ran(int i, int id, int v) {
    int d = cmp(i, v);
    int c = 0;
    if(ls) c += p[ls].s;
    if(d == -1) return c + 1;
    if(d == 0) return ran(ls, id, v);
    return c + p[i].cnt + ran(rs, id, v);
}
int readint() {
    char c;
    while((c = getchar()) && !(c >= '0' && c <= '9'));
    int ret = c - '0';
    while((c = getchar()) && c >= '0' && c <= '9')
        ret = ret * 10 + c - '0';
    return ret;
}
char readc() {
    char c;
    while((c = getchar()) && !isalpha(c));
    return c;
}
int main() {
    while(scanf("%d%d", &n, &k) != EOF) {
        int kk = 0;
        memset(pen, 0, sizeof pen);
        memset(lst, -1, sizeof lst);
        memset(cnt, 0, sizeof cnt);
        memset(acc, 0, sizeof acc);
        memset(lstacc, -1, sizeof lstacc);
        int root = 0;
        char op[20];
        sz = 0;
        for(int i = 0; i < n; ++i) {
            ins(root, i, 0);
        }
        while(scanf("%s", op) && op[0] != 'C') {
            ++kk;
            if(op[0] == 'S') {
                int t, team, res;
                int id;
                t = readint();
                team = readint();
                id = readc() - 'A';
                res = readint();
                if(lst[team] != -1 && t - lst[team] < 5) continue;
                if(acc[team][id]) continue;
                if(res == 0) {
                    pen[team][id] += 20;
                    lst[team] = t;
                    continue;
                }
                printf("[%d][%c]\n", team, (char)id + 'A');
                Remove(root, team, cnt[team]);
                cnt[team] += pen[team][id];
                cnt[team] += t;
                acc[team][id] = 1;
                cnt[team] -= M;
                lst[team] = t;
                lstacc[team] = kk;
                ins(root, team, cnt[team]);
                continue;
            }
            int team;
            if(op[0] == 'R') {
                scanf("%d", &team);
                printf("%d\n", ran(root, team, cnt[team]));
                continue;
            }
            int k;
            scanf("%d", &k);
            printf("%d\n", kth(root, k));
        }
        scanf("%s", op);
        puts("");
    }
    return 0;
}
基于YOLOv8与UI界面的校园垃圾分类督导系统 YOLO(You Only Look Once)是目前最为广泛使用的目标检测算法之一。它通过一次前向传递即完成目标检测,具有极高的速度与效率。YOLOv8是YOLO系列的最新版本,相比于之前的YOLO版本,YOLOv8在速度、精度、检测能力等方面都有了显著的提升。本项目通过结合YOLOv8模型与UI界面,成功实现了校园垃圾分类督导系统。该系统能够自动识别不同类型的垃圾,并通过UI界面实时展示垃圾分类的结果。 阅读详情

相关推荐

WGCNA样本量不够怎么办?5种替代方案帮你解决小样本基因共表达分析难题

本文针对WGCNA样本量不足的问题,提供了5种科学替代方案,包括CEMiTool、参数调整、多组学数据整合、机器学习特征提取和公共数据利用。这些方法帮助研究者在小样本条件下仍能进行可靠的基因共表达分析,特别适用于罕见病和珍贵临床样本研究。

weixin_42554042的博客 305

hdu 5091 Beam Cannon(线段树)

给出n个点和一个矩形的长和宽, 问这个矩形最多能覆盖多少个点。

yamiedie_ 952

Cadence Allegro新手避坑:从原理图到PCB,解决‘netrev.lst does not exist’的完整流程

本文详细介绍了Cadence Allegro从原理图设计到PCB导入网表的完整流程,特别针对新手常见的'netrev.lst does not exist'错误提供了系统解决方案。内容包括环境准备、原理图设计规范、网表生成与导入技巧,以及设计数据管理最佳实践,帮助工程师高效完成PCB设计任务。

weixin_42685438的博客 488

Comet OJ 茶颜悦色 线段树+扫描线(矩形覆盖最多点+优化)

题目:https://www.cometoj.com/contest/59/problem/D?problem_id=2713 题意:给你一个正方形,然后给你n个点,这个正方形能随意放哪,要求那个正方形能覆盖的最多点是多少个 思路:我们其实可以把题目转换一下,我们可以以每个点为中心,我们就可以以那个点+正方形边长,就代表正方形在这个范围内就能覆盖到当前点 然后我们就相当与求一个点被...

weixin_30649641的博客 292

React项目实战:用AntV G6打造可折叠组织架构图(附完整代码)

本文详细介绍了如何在React项目中使用AntV G6库构建一个功能完整的可折叠组织架构图。通过实战代码演示了从环境搭建、自定义节点、折叠状态管理到性能优化的全流程,重点解决了企业级应用中处理复杂树形数据、实现流畅交互等核心问题,并提供了可直接复用的组件代码。

weixin_29016315的博客 312

某商场G区火灾自动报警与控制系统设计

某商场G区火灾自动报警与控制系统设计 摘要:随着我国经济建设的迅速发展,人民生活水平不断提高,城市用地日益紧张,促使建筑物正朝着高层化、密集化方向发展。高层建筑的特点决定其火灾的危险性和高层建筑的火灾自动报警系统的重要性,一套完整的火灾自动报警及联动控制系统是高层建筑发生火灾时人们生命财产的有利保障,是能否快速准确地发现火情,把火灾扑灭在萌芽状态的关键所在。文章通过消防设计,论述了火灾自动报警及消...

weixin_44026784的博客 5368

HDU5091 Beam Cannon(给定长宽的矩阵最多覆盖几个点 模板)

题目 题意:有N个点,有一个W*H的矩形,这个矩形和x,y轴平行,问你怎么放置这个矩形,能让矩形里的点最多。 思路: 把每个原点(x,y)对应再来个映点(x+w,y),这样就有2N个点。这N个原点每次在区间【y,y+h】加1,而N个映点在区间【y,y+h】减1。就保证当前线段树里的所有的点都是横坐标位于最早的那个x往右w之内,代表这个矩阵的左下角的纵坐标是[y,y+h]此时可另当前点合法。解释不清...

qq_42576687的博客 435

CTF 命令执行绕过总结

tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示。或:rce-xor-or.php & rce-xor-or.py。# ls -t >shell 将输出输入到shell文件中。异或:rce-xor.php & rce-xor.py。%09(url传递)(cat%09flag.php)sh /flag 2>%261 //报错出文件内容。2、1使用空变量$*和$@,$x,${x}绕过。7、异或无符号(过滤0-9a-zA-Z)more:一页一页的显示档案内容。

jnszstmei的博客 1960

hdu 5091 给定矩形覆盖尽量多点 扫描线+线段树

http://acm.hdu.edu.cn/showproblem.php?pid=5091 给你10000以内的敌舰的坐标(即分别为x,y),要求用W*H的矩形去围住一个区域,使得这个区域内的敌舰最多,矩形边框上的敌舰也算在内。矩形可以平移,不能旋转。 我们用矩形的中心点来描述这个矩形,然后对于每个敌舰,我们建立一个矩形中心的活动范围,即矩形中心在该范围内活动就可以覆盖到该敌舰....

weixin_30443895的博客 252

R语言WGCNA实战:从基因表达矩阵到模块可视化全流程(附避坑指南)

本文详细介绍了使用R语言进行WGCNA(加权基因共表达网络分析)的完整实战流程,涵盖从基因表达矩阵预处理、软阈值选择、网络构建与模块识别,到模块与表型关联分析及结果可视化的关键步骤。文章重点解析了代码实现,并提供了针对数据质量检查、参数调整等常见问题的避坑指南,帮助生物信息学研究者高效挖掘基因共表达模块的生物学意义。

weixin_29062823的博客 580

OpenClaw 报错 TypeError: Cannot read properties of undefined (reading ‘prototype‘):Node.js 版本不兼容

国产化环境中部署OpenClaw云边协同平台时,出现"TypeError: Cannot read properties of undefined (reading 'prototype')"报错。经分析发现根本原因是Node.js版本与依赖生态不兼容,新版本Node(如v21)移除了旧依赖使用的内部API。解决方案包括:1)使用nvm切换至兼容的Node 16/18 LTS版本;2)容器化部署固定Node版本;3)遵循官方推荐的引擎版本范围。该问题揭示现代工程中版本管理的重要性,

博客 2314

矩形覆盖问题

问题描述: 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。 请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 解析:当n = 1时,只有一种方法,竖着放。 当n = 2时,有两种,横着放,或者竖着放, 当n >= 3时,和斐波那契数列类似。先分为第一步是横着放还是竖着放,然后分别求出各自剩余的未覆盖矩形的覆盖方法。让最中结果相加。 int RectCo

观赏的博客 1953

FATFS挂载多个存储设备(2):功能配置及功能测试

本文介绍了基于FATFS文件系统实现多存储设备挂载的方法,包含底层设备驱动函数编写、功能配置、功能测试。

kevin1499的博客 2585

hdu 5091 Beam Cannon(线段树扫描线)

题目链接:hdu 5091 Beam Cannon 题目大意:给定N个点,现在要有一个W∗H的矩形,问说最多能圈住多少个点。 解题思路:线段的扫描线,假设有点(x,y),那么(x,y)~(x+W,y+H)形成的矩形,以框的右下角落的位置是可以圈住(x,y) 点,所以N个点即为N个矩形,求覆盖的最大次数,扫描线裸题。 #include #include #include #

不慌不忙、不急不躁 1799

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

hdu 5091 Beam Cannon(线段树+扫描线+离散化)

hdu 5091 Beam Cannon(线段树+扫描线+离散化)—— black 的专栏 —— waShaXiu

black的专栏 1251

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

HDU 5091 Beam Cannon(扫描线 + 线段树)

题目链接:Beam Cannon 解题思路:

CrazySona的专栏 802

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

hdu 5091 Beam Cannon(线段树 + 扫描线)

题意:平面上有n个点,选一个W×H的矩形,使得矩形内的点最多。 思路:

绝望的乐园 968

HDU 5091 Beam Cannon

复习了一下线段树,才发现线段树还是做的太少了,好多都忘了 线段树主要有以下功能:RMQ,区间总和查询,单点更新,区间更新 都忘了区间更新时要延迟更新了,这里一开始WA了。 再说说这题的思路: 把每个点作为矩形的左下角,画出所有矩形,以被矩形覆盖次数最多的区域中的任一点作为矩形的右上角,即为我们要求的矩形。 也就是说,我们要求的是被矩形覆盖次数最多的次数,这样用扫描线就可以解决,但直接扫描

lj94093的专栏 652

poj2482 Stars in Your Window hdu 5091 Beam Cannon 线段树 扫描线

今天把线段树神题2482过了,然后把弱化版的28

行走世间,皆为妖怪 998

hdu5091-Beam Cannon 线段树+扫描线 求矩形内最多能包含多少个点

Beam Cannon Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1110    Accepted Submission(s): 433 Problem Description Recently, the γ

wangheng 863

HDU - 5091 Beam Cannon 线段树 扫描线

题目链接:点击查看 题意:给你n个点的坐标,给你一个矩形的w,h,问最多能圈住多少点 题解:扫描线,按x轴进行扫描,其实就是把一个点的左右范围找出来,一个为正,一个为负,把y对应的区间更新一下即可,我对y离散化了一下,其实不离散化也行,我们吧初始都加为正,y最多80000,时间也差不多。 #include &lt;bits/stdc++.h&gt; using namespace std;...

还我笑颜 218

hdu5091 Beam Cannon(扫描线,线段树)

题意: 在二维坐标系中有n个点,给定这n个点的坐标(x,y), 现在你有一个w*h的框,问最多能框到多少个点。 数据范围:n<=1e4,-2e4<=x,y<=2e4,1<=w,h<=4e4 解法: 扫描线,从左到右用竖线扫描横坐标, 如果存在点(x,y),那么在x处加入这个点,在x+w+1处减去这个点. 然后问题变为在固定的横坐标x下,长度为h最多能覆盖多少个点. 发现这样还是很难快速计算,因为需要枚举端点. 一个巧妙的做法: 令线段树的每个位置y表示[y,y+h]能覆盖到

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 243

hdu 5091 beam cannon

题目链接题目大意: 在平面内有一些点,现在给定一个矩形框,求矩形框能包含最多点的个数。分析: 可以转化成一维的线段树。先确定横坐标的范围,这样只需要找满足纵坐标最大的差小于等于矩形框的高的最多的点就行了。把纵坐标做成线段树,以每个点的纵坐标为起点,长度为矩形框的高在线段树上覆盖。如果有两个线段覆盖了同一段区域,那么说明可以找到一个矩形同时覆盖这两个点。所以题目转化成了找线段树中最大的线段覆盖数。

萌の上揺れ 345

HDU 5091 Beam Cannon(线段树)

题目:Beam Cannon

hongrock的专栏 935

HDU - 5091 Beam Cannon(线段树+几何)

题目:拿一个w*h的矩形(不能旋转),能覆盖平面上最多多少点,边缘经过算覆盖。 线段树维护y坐标,表示以这个点为最上边的点,选这个点往下h高度的矩形能覆盖的点数。由x轴从左到右间隔w遍历,每遍历一个x就更新x上的yi,yi这个点只会给(yi,yi+h)这个区间影响,所以只需要更新区间(yi,yi+h); 区间更新单点查询 #include&lt;bits/stdc++.h&gt; usi...

XFire的博客 286

HDU - 5091 Beam Cannon (线段树+扫描线)

Recently, the γ galaxies broke out Star Wars. Each planet is warring for resources. In the Star Wars, Planet X is under attack by other planets. Now, a large wave of enemy spaceships is approaching. T...

vocaloid01的博客 270
上一篇: codeforces 551E GukiZ and GukiZiana 分块
下一篇: hdu 5096 ACM Rank(treap) (未敲。)
sega_handsome
博客等级 码龄10年 7粉丝 164原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值