hdu 6070 Dirt Ratio 二分,线段树

iotStudio轻量级工业物联网后台:产线老师傅当天上手的设备看板 工业物联网(IIoT)核心在于设备连接、数据可视化与快速配置,其底层依赖Modbus RTU、OPC UA等工业协议解析与低代码告警规则绑定。iotStudio以极简技术栈(Python+Flask+SQLite)实现单机部署,将串口通信、寄存器映射、前端曲线图与弹窗告警封装为开箱即用能力,显著降低中小制造企业数字化门槛。适用于注塑机维保、温控表监控、老旧PLC接入等轻量场景,尤其解决维修人员无IT基础、无专职运维、需手机直查实时数据的刚性需求。 阅读详情

题目:http://acm.hdu.edu.cn/showproblem.php?pid=6070

题意:定义一个区间的值为(不同数的个数/区间长度),求所有区间内的最小值

有一种01分数规划的思想,二分结果值now,这样只要存在一个区间使得这个值<=now,即可

也就是  dif/(r-l+1)<=now  ,  这样要使dif/(r-l+1)部分尽量的小,并不好确定,转换一下

dif<=(r-l+1)*now     依旧不好确定,因为这样还是除了枚举所有的l,r,并没有什么好思路,枚举转移也不好做,如果能分开l和r,按一定顺序枚举l或r,是不是就有一些可以重复利用的东西

dif+l*now<=(r+1)*now

这样O(n)枚举每一个r,并且要快速的确定dif+l*now的最小值,l*now是个固定值,dif的求法可以用线段树实现,这样也能快速的求这两者加和的最小

线段树里保存的是每个点到当前枚举的r之间的dif值,记录每一个数和他相同的且在他之前的最后一次出现的下标pre,每次通过线段树更新pre【a【r】】和r之间(左开右闭)加一,这样就能保证每个相同的数在同一个区间内对dif的贡献只有一次。


因为错在了非叶子节点的lazy数组忘记赋0,改了半天,很智障。。。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 60005;
const double eps = 1e-7;
double seg[5 * maxn], lazy[5 * maxn], mid;
int pre[maxn], n, a[maxn];
void pushdown(int node)
{
    if(lazy[node])
    {
        lazy[node << 1] += lazy[node];
        lazy[node << 1 | 1] += lazy[node];
        seg[node << 1] += lazy[node];
        seg[node << 1 | 1] += lazy[node];
        lazy[node] = 0;
    }
    return ;
}
void pushup(int node)
{
    seg[node] = min(seg[node << 1], seg[node << 1 | 1]);
    return ;
}
void build(int l, int r, int node)
{
    if(l == r)
    {
        lazy[node] = 0;
        seg[node] = mid * l;
        return ;
    }
    lazy[node] = 0;
    int m = (l + r) >> 1;
    build(l, m, node << 1);
    build(m+1, r, node << 1 | 1 );
    pushup(node);
    return ;
}
void update(int l, int r, int k, int le, int ri, int node)
{
    if(le >= l && ri <= r)
    {
        seg[node] += k;
        lazy[node] += k;
        return ;
    }
    pushdown(node);
    int m = (le + ri) >> 1;
    if(m >= l)
        update(l, r, k, le, m, node << 1);
    if(m < r)
        update(l, r, k, m + 1, ri, node << 1 | 1);
    pushup(node);
    return ;
}
double query(int l, int r, int le, int ri, int node)
{
    if(l <= le && r >= ri)
        return seg[node];
    pushdown(node);
    int m = (le + ri) >> 1;
    double res = 1e18;
    if(m >= l)
        res = min(res, query(l, r, le, m, node << 1));
    if(m < r)
        res = min(res, query(l, r, m + 1, ri, node << 1 | 1));
    pushup(node);
    return res;
}
int check()
{
    memset(pre, 0, sizeof(pre));
    build(1, n, 1);
    for(int i = 1; i <= n; i++)
    {
        double now = mid * (i + 1.0);
        update(pre[a[i]]+1, i, 1, 1, n, 1);
        if(query(1, i, 1, n, 1) <= now)
            return 1;
        pre[a[i]] = i;
    }
    return 0;
}
int main()
{
    int T;
    cin >> T;
    while(T--)
    {
        cin >> n;
        for(int i = 1; i <= n; i++)
            scanf("%d", &a[i]);
        double ans = 1, le = 0, ri = 1;
        while(ri - le >= eps)
        {
            mid = (le + ri) / 2.0;
            if(check())
            {
                ans = mid;
                ri = mid - eps;
            }
            else
            {
                le = mid + eps;
            }
        }
        printf("%.10lf\n", ans);
    }
    return 0;
}


基于STM32设计的心率脉搏测量仪(项目资料ID:9) 本设计基于STM32F103单片机开发了一款便携式心率脉搏测量仪,通过光电传感器采集脉搏信号,经放大(约1200倍)、滤波(低通及四阶低通滤波)、比较及偏置电压调理后,由STM32进行ADC采样与数据处理。硬件采用Altium Designer设计,包含信号调理电路(限定心率范围43.4-800次/分钟)及电源管理模块;软件基于STM32CubeMX开发,利用队列存储和时间间隔平均算法优化精度,实现多终端显示(OLED实时心率/动画、MATLAB波形分析、蓝牙传输至手机)。系统支持自动启停(检测脉搏启 阅读详情

相关推荐

逆向实战:手把手教你分析Google DroidGuard虚拟机的加密与反调试(附Python脚本)

本文深入解析Google DroidGuard虚拟机的加密机制与反调试策略,提供从环境配置到逆向分析的完整实战指南。通过IDA Pro、Frida等工具链,详细剖析DroidGuard的信号拦截、内存校验等保护机制,并附Python脚本实现自动化分析,助力Android安全研究人员突破GMS核心组件的安全防护。

weixin_32428571的博客 313

HDU 6070 Dirt Ratio 线段树 + 二分

传送门:HDU6070 题意:给出一段序列,找出其中一段子序列,使得子序列中不同元素个数除以子序列元素总数最大。 思路: 先贴上官方题解: 二分答案midmid,检验是否存在一个区间满足\frac{size(l,r)}{r-l+1}\leq mid​r−l+1​​size(l,r)​​≤mid,也就是size(l,r)+mid\times l\leq mid\times (

WA是一笔财富 309

【墨者学院 】uWSGI 漏洞复现(CVE-2018-7490)

0x01 漏洞详情 uWSGI是一款Web应用程序服务器,它实现了WSGI、uwsgi和http等协议。 uWSGI 2.0.17之前版本中存在路径遍历漏洞,该漏洞源于程序没有正确的处理DOCUMENT_ROOT检测。攻击者可通过发送带有‘…’序列的特制URL请求利用该漏洞查看系统上的任意文件。 uWSGI 2.0.17之前版本中存在路径遍历漏洞,该漏洞源于程序没有正确的处理DOCUMENT_RO...

Summer's blog 1万+

HDU 6070 Dirt Ratio(线段树、二分)

http://acm.hdu.edu.cn/showproblem.php?pid=6070 题解   首先不难看出错误率是单调的,那么我们可以直接二分答案x,某个区间的错误率=区间数的种类cnt/区间长度r-l+1,变成:cnt+l*x<r*x+x;然后枚举区间区间右端点r,当前点影响的区间是le[i]+1到i,关于区间操作我们可以用线段树区间更新和区间查询最小值。 1 #de...

weixin_33775572的博客 72

高光谱图像处理和分析软件(包含雷尼绍Renishaw wdf 文件导入解析功能)

是一款基于微软windows操作系统的多传感器成像工具,用于处理和分析高光谱图像。它是一个模块化的系统,由一个基本的引擎,一个图形用户界面,一个化学计量工具箱和可选的用户提供的模块组成。它支持最重要的光谱成像技术,如UV/Vis、红外、拉曼、太赫兹、光发射/吸收和质谱。除此之外,还允许用户将高光谱图像与物理属性图和传统高分辨率彩色照片合并在一起 链接:https://pan.baidu.com/s/1ruQ5YSh5_ZS9wx_V3Q5Oow 提取码:qdx0 ...

业余程序员小徐的博客 8072

HRNet 【demo 复现过程】

Deep High-Resolution Representation Learning for Human Pose Estimation

qq_45257495的博客 5558

【HDU 6070 Dirt Ratio】 二分 & 线段树

Dirt RatioTime Limit: 18000/9000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) Total Submission(s): 1275 Accepted Submission(s): 568 Special JudgeProblem Description In ACM/ICPC

楚江枫 503

关于VS2022创建winform窗体后择项或选择工具箱项加载visionPro控件卡住,窗口未响应解决方法

解决winform加载工具箱选择项卡死问题

xiaokiss_的博客 3213

HDU 6070 Dirt Ratio 线段树 二分

题目 In ACM/ICPC contest, the ''Dirt Ratio'' of a team is calculated in the following way. First let's ignore all the problems the team didn't pass, assume the team passed Xproblems during the contes

北望村 1111

MobaXterm详细使用教程

当然MobaXterm的功能远不止这些,但这些是最基本,最常用的,因此先拿出来讲。点击确定后,输入密码(输入密码时并不会显示,只管输入后按确定即可,第一次登陆成功后会提示保存密码,一般选择同意),就可以连接上虚拟机了。(2) 我们可以直接apt-get安装vim等常用功能(或者官网下载插件),实现在windows下模拟linux环境,这样就可以使用vi命令准备INCAR文件,也可以使用Gnuplot进行绘图。支持 Unix 命令(bash,ls,cat,sed,grep,awk,rsync,…

博客 4万+

QT编程之PCM音频播放与采集

Qt5/Qt6通用方案。

深之JohnChen的专栏 1171

【线段树+二分答案+分数规划】 HDU - 6070 D - Dirt Ratio

D - Dirt RatioHDU - 6070 In ACM/ICPC contest, the ''Dirt Ratio'' of a team is calculated in the following way. First let's ignore all the problems the team didn't pass, assume the team passedXXpro...

qq_41037114的博客 329

MimicKit 人形机器人强化学习全身模仿控制算法使用教程

本文介绍了MimicKit运动模仿算法框架的使用指南。主要内容包括:1)安装IsaacGym和依赖项;2)训练模型命令及参数说明;3)测试模型的方法;4)分布式训练配置;5)使用TensorBoard可视化日志;6)动作数据格式说明。该框架支持DeepMimic、AMP、ASE、ADD等算法,包含PPO、AWR等强化学习算法,适用于物理仿真角色动画控制研究。

机器人控制与仿真应用 1202

HDU 6070 Dirt Ratio [二分+线段树]

HDU 6070 Dirt Ratio [二分+线段树]

ACTerminate的博客 1563

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

HDU-6070 Dirt Ratio(二分+线段树+分数规划)

传送门:HDU-6070 上次刚好摔倒在CF Round#427的D题上,这次又来了个类似的题目。。。 题意:要求找一段区间使得区间内不同数的个数/区间长度的比值最小 题解:二分+线段树 设sum为区间内不同数的个数,len为区间长度 我们先二分答案得到k,那么我们需要在序列中找一段区间使得它的sum/len 转换一下得到sum-len*k,这是我们熟悉的分数规划 现在问题就很好

十分残念的博客 1535

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

hdu-6070 _Dirt Ratio (二分答案+线段树维护)

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6070 Dirt Ratio Time Limit: 18000/9000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) Total Submission(s): 1350    Accepted Submis

Vision 809

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

HDU 6070 Dirt Ratio 分数规划 二分 线段树维护区间最值

链接http://acm.hdu.edu.cn/showproblem.php?pid=6070题意给n,(1<=n<=6∗104)n, (1 <= n <= 6 * 10 ^ 4)个数,每个数表示一个颜色,在所有合法的区间[L,R][L, R]中,设XX为[L,R][L, R]区间中不同颜色的个数,YY为区间长度,求min(X/Y)min(X / Y)。思路4天前cf刚刚打过这题,泥萌在想什么?(

Brassica_的菜园 1443

HDU_6070_Dirt Ratio_二分_线段树优化

题目大意: 给一串长度为n的整数数列(1 思路: 在0~1内二分找最小值每次判断是否存在一个子串的值小于等于mid. X / Y X X X + mid * (l - 1) 从左到右枚举右界r,当枚举至当前的r时,线段树中的 0~r 区间内的保存l到当前r之间出现不同数字个数和mid * (l - 1)的和,用线段树维护区间最小值与 mid * r 比较. 用pre[]

Sangria's Blog 507

hdu 6070 Dirt Ratio二分 线段树

Dirt Ratio Time Limit: 18000/9000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) Problem Description In ACM/ICPC contest, the ''Dirt Ratio'' of a team is calculated in the fo

老李2009 428

HDU 6070 Dirt Ratio(二分+线段树)

Dirt Ratio Problem Description In ACM/ICPC contest, the ''Dirt Ratio'' of a team is calculated in the following way. First let's ignore all the problems the team didn't pass, assume the team pas

Expecto__Patronum的博客 455

HDU6070 Dirt Ratio(线段树+二分)

Dirt Ratio Time Limit: 18000/9000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) Total Submission(s): 1934    Accepted Submission(s): 901 Special Judge Problem Description

gyr 488

HDU 6070 Dirt Ratio 二分+线段树

题意是说给出一组数,在这一组数中找一个区间,使这个区间内AC题数/提交数的值最小。(假设每个区间内最后一次提交都是AC的)     因为保证每个区间都是有题AC的,所以这里可以直接简化为区间内题目种数/区间长度,但在如何更快的处理题目种数的时候一直没能找到合适的处理办法,看了好多博客才能明白这个整体的思路= =(感觉让我自己想怎么都想不出要二分答案....)     首先假设答案为k,区间的题

富士山下 363

hdu 6070 Dirt Ratio(线段树+二分答案)

Dirt Ratio Time Limit: 18000/9000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) Total Submission(s): 1835 Accepted Submission(s): 842 Special Judge Problem Description In ACM...

咸鱼有梦想 538

hdu 6070 Dirt Ratio(二分+线段树维护区间最小值)

Dirt Ratio Time Limit: 18000/9000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) Total Submission(s): 621    Accepted Submission(s): 239 Special Judge Problem Description I

MR CODER 664

HDU - 6070 Dirt Ratio (二分 + 线段树)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6070 题目大意:给定一个序列a,对于任何一个区间 [l,r],它的“Dirt Ratio”值为区间内不同元素的个数除以区间长度。现在要你求出序列a中哪个区间的“Dirt Ratio”值最小,输出最小值。 题目思路:由于是要找最小值,我们考虑用二分来找答案。假设当前二分的答案的值为 x ,如果这个序...

Lee_w_j__的博客 329

hdu6070 Dirt Ratio(二分+线段树)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6070 题意:在区间[l,r]中,不同数的个数/区间长度的最小值 解: 用二分找答案最小值,用size(l,r)/(r-l+1) 公式可以赚话为size(l,r)+l*mid size(l,r)可以实时更新,且可以用数组进行存储。 代码: #include #include #incl

no2015214099的博客 382
上一篇: Codeforces Round #420 (Div. 2) E. Okabe and El Psy Kongroo 矩阵快速幂+dp
下一篇: poj2912Rochambeau 枚举+带权并查集
jerans
博客等级 码龄10年 54粉丝 255原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值