codeforces 702F 可持久化平衡树

人工势场法在自动驾驶避障中的实践与优化 本文深入探讨了人工势场法在自动驾驶避障中的核心原理与实践优化。通过解析引力与斥力模型,揭示了经典算法在局部最优和目标不可达等问题上的局限性,并重点介绍了改进斥力场函数、引入道路边界斥力及动态参数调整等关键优化策略,有效提升了该局部路径规划算法在复杂动态场景下的实用性与鲁棒性。 阅读详情

题意:有n种T恤,每种有一个价格ci和品质qi。有m个人要买T恤,第i个人有vi块钱,每个人每次都买一件能买得起的qi最大的T恤。一个人只能买一种T恤一件,所有人互不影响。求最后每个人买了多少件T恤。

将T恤排序。用可持久化平衡树维护所有人。扫一遍T恤,将钱数大于当前T恤价值的人拿出来,把他们的钱数减当前价格,再塞回去。

当减完价格后这个集合的最小元素不一定大于另一个集合的最大元素。这样就不能merge。

不过由于当前集合中减完价格后的值小于价格的人的钱数一定至少减半,所以每个人只能有log次减完价格后的值小于价格。因此可以暴力将这些人插入。复杂度log^2

#include <bits/stdc++.h>
using namespace std;
#define N 210000
#define ls ch[x][0]
#define rs ch[x][1]
int n,m,root;
pair<int,int>a[N];
int val[N],ch[N][2],bv[N],bc[N],rnd[N],cnt[N];
void pushdown(int x)
{
    if(!x)return;
    if(bv[x])
    {
        val[ls]+=bv[x];val[rs]+=bv[x];
        bv[ls]+=bv[x];bv[rs]+=bv[x];
        bv[x]=0;
    }
    if(bc[x])
    {
        cnt[ls]+=bc[x];cnt[rs]+=bc[x];
        bc[ls]+=bc[x];bc[rs]+=bc[x];
        bc[x]=0;
    }
}
void split(int rt,int &x,int &y,int v)
{
    if(!rt){x=y=0;return;}
    pushdown(rt);
    if(val[rt]<v)
        x=rt,split(ch[rt][1],ch[x][1],y,v);
    else
        y=rt,split(ch[rt][0],x,ch[y][0],v);
}
int merge(int x,int y)
{
    if(!x||!y)return x+y;
    if(rnd[x]<rnd[y])
    {
        pushdown(x);
        ch[x][1]=merge(ch[x][1],y);
        return x;
    }
    else
    {
        pushdown(y);
        ch[y][0]=merge(x,ch[y][0]);
        return y;
    }
}
int insert(int x,int y)
{
    int r1=0,r2=0;
    split(x,r1,r2,val[y]);
    r1=merge(r1,y);
    x=merge(r1,r2);
    return x;
}
int dfs(int x,int y)
{
    if(!x)return y;
    pushdown(x);
    y=dfs(ls,y);
    y=dfs(rs,y);
    ch[x][0]=ch[x][1]=0;
    return insert(y,x);
}
void down(int x)
{
    if(!x)return;
    pushdown(x);
    down(ls);down(rs);
}
int main()
{
//  freopen("tt.in","r",stdin);
    scanf("%d",&n);
    for(int i=1,c,q;i<=n;i++)
    {
        scanf("%d%d",&c,&q);
        a[i]=make_pair(-q,c);
    }
    sort(a+1,a+1+n);
    scanf("%d",&m);
    for(int i=1;i<=m;i++)
    {   
        scanf("%d",&val[i]);
        rnd[i]=rand();
        root=insert(root,i);
    }
    for(int i=1;i<=n;i++)
    {
        int c=a[i].second;
        int r1=0,r2=0,r3=0,r4=0;
        split(root,r1,r2,c);
        val[r2]-=c;bv[r2]-=c;
        cnt[r2]++;bc[r2]++;
        split(r2,r3,r4,c-1);
        r1=dfs(r3,r1);
        root=merge(r1,r4);
    }
    down(root);
    for(int i=1;i<=m;i++)
        printf("%d ",cnt[i]);
    return 0;
}
【WorkBuddy专栏19】技能的创造与迁移——从零开始打造你的AI工作流 阅读详情

相关推荐

FeynRules的上手使用3--运行

FeynRules的运行 接上两篇,在我们正确的设定模型参数和拉氏量之后,就可以运行FeynRules来推导费曼规则。 装载文件 首先需要设定FeynRules文件所在位置,并装载FeynRules模块: $FeynRulesPath = SetDirectory[ ] << FeynRules` 接下来是装载写好的模型文件: LoadModel[ < file.fr >, < file2.fr >, … ] 模型文件后缀为".fr",可以分几块构成。模型描述可以写在

cool_bot的博客 1075

可持久化平衡树 详解

可持久化平衡树————C++,从入门到入土

White_gugu的博客 925

生信人填坑记 orthofinder的安装和基础使用

其中常用的有两个结果,第一个是Orthogroups文件夹下的Orthogroups.GeneCount.tsv,这个文件里保存着每个家族在每个物种里的成员数量。(写到这儿饭点到了,吃饭要紧…在国内使用conda的同学我相信很多人都会遇到-|- -|- -|- -|- -|- -|- -|- -|- 一直转圈。软件的是由很简单,将你要跑的物种的蛋白质文件放在work/data目录下,文件名都用物种缩写,后缀统一就行。当然,很多软件都会自带一个这样的文件,conda装不了的时候可以去软件官网溜达溜达。

qq_43337286的博客 5382

Codeforces Round #702 (Div. 3) A~F题解

A. Dense Array 解题思路 我们将这个公式变化一下,实际上就是要求相邻两个数ai,ai+1a_i,a_{i+1}ai​,ai+1​满足ai≤2ai+1,ai+1≤2aia_i\leq 2a_{i+1},a_{i+1}\leq 2a_{i}ai​≤2ai+1​,ai+1​≤2ai​,所以我们维护这样的条件即可。 AC代码 /** *@filename:A *@author: pursuit *@csdn:unique_pursuit *@email: 2825841950@qq

pursuit的博客 404

STC15单片机实战项目软件开发第四讲 - 按键检测(状态机)

软件开发第四讲 - 按键检测(状态机) 一、工具链接 1、Keil c51 UV4 https://yunpan.360.cn/surl_yrIfYYmeRFk 2、STC-ISP下载软件 https://yunpan.360.cn/surl_yxH4CuUUvI3 二、学习板获取方式 方法1:自己设计PCB,自行打板焊接; 方法2:用群主设计的PCB,自行打板焊接; 方法3:向群主购买,淘宝链接...

硬件家园 3048

手把手教你用内核远程call实现64位进程注入(附完整ShellCode示例)

本文深入探讨了在Windows 64位环境下,通过内核态直接操作线程TrapFrame结构实现进程注入的高级技术。文章提供了从驱动框架设计、用户态-内核态通信,到定位修改TrapFrame、编写Shellcode及执行环境恢复的完整实战指南,并附有详细的代码示例,为安全研究人员和开发者提供了绕过用户态检测、实现底层远程代码执行的新思路。

weixin_28396629的博客 346

Codeforces Round #702 (Div. 3) F

Problem - F - Codeforceshttps://codeforces.com/contest/1490/problem/F虚拟比赛差点做出来这题,最后有思路时间不够了,属于绕远路了,一开始就想着找规律而不是去做更朴素的算法 #include<bits/stdc++.h> using namespace std ; const int maxn = 2e5+10; long long sum[maxn]; vector<int>z; map<int,int

m0_57221330的博客 160

GD32F450以太网(2-2): PHY芯片IP101GR介绍

IP101是台湾省九阳电子公司生产制造的,符合IEEE 802.3/802.3u标准单端口快速以太网收发器100Mbps和10Mbps操作,它支持自动MDI/MDIX功能,简化网络安装和减少系统维护成本。支持Auto MDI/MDIX已内置4个49.9欧的精密电阻支持中断功能支持 MII/RMII 接口超低功耗

Zhichao_Zhang的博客 1万+

可持久化平衡树

Kirin:可持久化数据结构可以保留历史版本,用新建代替修改。 洛谷模板题 题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作(对于各个以往的历史版本): 1.插入x数 2.删除x数(若有多个相同的数,因只删除一个,如果没有请忽略该操作) 3.查询x数的排名(排名定义为比当前数小的数的个数+1。若有多个相同的数,因输出最小的排名) 4.查询排名为x的数 5....

weixin_30599769的博客 370

基于高频变压器的隔离式推挽栅极驱动电路

摘要:本文介绍了一种基于高频变压器的隔离式推挽栅极驱动电路,通过变压器实现电气隔离,为功率MOS管提供可靠驱动信号。电路包含输入侧PWM信号处理、变压器磁耦合隔离传输以及副边驱动逻辑等关键部分,利用电阻电容网络控制开关速度并防止误触发。该隔离驱动方案广泛应用于高压开关电源、新能源汽车电机控制器、光伏逆变器和工业变频器等需要高电压隔离及抗干扰能力的电力电子设备中,有效保障系统安全性和可靠性。

qq_37999850的博客 485

【信息系统项目管理师】高分论文:论信息系统项目的整合管理(绩效考核系统)

我们将项目管理计划中的子计划包括项目范围、进度、成本、质量管理计划,过程改进计划,人力资源管理计划,风险、采购管理计划,干系人管理计划,项目范围、成本、进度基准作为依据,查看项目的各个方面,通过组织全体团体成员会议来解读由各监控过程提供的信息,之后我与项目管理团队一起制订所需措施,确保项目绩效达到预期要求。在一个项目中,变更是必然的,也是不可避免的,进度拖延,成本失控,客户有新的需求等都会引起项目的变更。在本项目中,我要求有处于工作状态的产品,开发人员才可以对其任意修改,修改完成后,重新入库即可。

数据知道的博客 6888

可持久化平衡树(fhq Treap)

P3835 【模板】可持久化平衡树 其实和一般的fhq Treap差别不是很大,只有在分裂,合并的时候加入可持久化的操作 具体操作如下 void split(int p,int val,int &x,int &y) { if(!p) x=y=0; else { if(e[p].val<=val) { x=++tot; e[x]=e[p]; split(e[x].r,val,e[x].r,y); update(x); } else {

lcl1234567890lcl的博客 575

PCL:读写pcd点云的两种方式

本文介绍了PCL读写点云的两种方式:PCDReader,PCDWriter;loadPCDFile,savePCDFile.

孙悟空 1万+

[可持久化平衡树][codeforces702F]T-shirts

CF 702 F 分析: 衣服排好序后把所有人插入平衡树,然后用打标记的方式维护买的操作,就是split一下之后把权值都大于当前衣服的那棵树打上购买标记,购买标记分为ans和money两个部分,merge的时候暴力把权值小的树中所有权值大于另外一棵树中某些节点的节点丢到那棵树中,一个节点最多被丢log次所以复杂度是O(nlog2n)O(nlog^2n)O(nlog2n) Code: #includ...

romiqi 475

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Codeforces702F. T-Shirts

一道很好的idea题 一开始想过合并 但是总感觉合并的复杂度太大 然后发现其实每个元素被合并次数是可以做到log(109)log(10^9)次的然后就可以直接暴力插入 复杂度是nlog(n×109)nlog(n×10^9)的 用重量平衡树维护一下#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #in

Don't fake it till you made it 868

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

可持久化线段树/平衡树

对于一棵树来说,我们每次单点修改的时候,无非就是修改了它的左子树或者是右子树,那么对于新的版本来说,当他修改的是左子树的节点的时候,显然我们可以继续沿用历史版本的右子树,也就是只要复制并修改一棵左子树就可以了;这就是可持久化的核心思想。操作和可持久化线段树类似,我这里采用的是FHQ-Treap实现的平衡树,在split的过程中会修改树的值,因此在split的时候需要开新点,由于merge的时候连接的都是split开的新点,所以merge就不用再开新点了。

Se_ren_di_pity的博客 812

平衡树与可持久化treap

平衡树(二叉树) 线段树不支持插入or删除一个数于是平衡树产生了常见平衡树:treap(比sbt慢,好写吧),SBT(快,比较好写,有些功能不支持),splay(特别慢,复杂度当做根号n来用,功能强大,不好写),rbt(红黑树,特别快),//替罪羊树,朝鲜树晚上要讲的不旋转平衡树: 平衡树: 节点的左儿子中的每一个一定比他小,右儿子中的每一个一定比他大那么它的中序...

agtvo48266的专栏 252

【笔记 & 题解 | FHQ Treap(可持久化)】洛谷P3369【模板】普通平衡树 & 洛谷 P3835 【模板】可持久化平衡树

平衡树团建。

Isaac Regulus的博客 1785

【模板】可持久化平衡树

【模板】可持久化平衡树 题目背景 本题为题目 普通平衡树 的可持久化加强版。 数据已经经过强化 感谢@Kelin 提供的一组hack数据 题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作(对于各个以往的历史版本): 插入x数 删除x数(若有多个相同的数,因只删除一个,如果没有请忽略该操作) 查询x数...

loooooog的博客 396

【平衡树】非旋转Treap及其可持久化详解

Part.0 前置知识 Treap; 可持久化。 Part.1 非旋转Treap 顾名思义就是不需要旋转的Treap。 众所周知所有的平衡树都需要通过旋转来保证深度。 然而非旋转Treap却不需要通过旋转就能够保证深度。 非旋转Treap通过两个基本操作来实现平衡树的所有操作。 合并操作 分裂操作(按值分裂) 其他操作 参考模板 指针写的代码清晰度果然很高。QAQ… struct NonRot...

IDDFS 528

第四章数据结构 (4):可持久化数据结构、平衡树、AC自动机

目录一、可持久化数据结构1.1 最大异或和1.2 第K小数二、平衡树 (Treap)2.1 普通平衡树2.2 营业额统计三、AC自动机3.1 搜索关键词3.2 单词 一、可持久化数据结构 可持久化前提:本身的拓扑结构在操作过程中是不改变的 可持久化解决问题 可以存储数据结构的历史版本 核心思想:仅记录每一个版本与前一个版本不同的地方 Trie树的可持久化 假设有字符串cat、rat、cab、fry,则静态Trie树: 可持久化Trie树,图中绿色虚线相连的结点实质上是同一个结点: // 插入操作 //

lumoumou`s blogs 295

可持久化treap(FHQ treap)

FHQ treap 的整理 treap = tree + heap,即同时满足二叉搜索树和堆的性质。 为了使树尽可能的保证两边的大小平衡,所以有一个key值,使他满足堆得性质,来维护树的平衡,key值是随机的。 treap有一般平衡树的功能,前驱、后继、第k大、查询排名、插入、删除。也比较好写 但是对于区间上的问题是不能做的,例如 区间增减 区间求最值 区间反转(倒序...

weixin_30858241的博客 309

可持久化学习总结

大体思路可持久化,就是按照时间(例如T个时间点),每一个时间点建立一个数据结构。暴力做肯定会炸,所以通过指向历史节点的方法来节省空间,时间,从而实现访问历史情形。 至于具体是如何指向历史节点的,请直接看下面的例子1.可持久化线段树(又名主席树/函数式线段树)(这个详讲,后面的数据结构都差不多同理,毕竟我懒)举个版题:POJ 2104题意就是给出一个数组(10w),和一些询问(5k),每次询问给出一

Nuclear_fusion的博客 483

FHQ无旋平衡树可持久化详解

引入引入在,我们研究了FHQ实现与,在这一篇题解,我们将要探讨关于FHQ实现的操作。例题由题目可得这显然必须使用可持久化,我们先了解一下什么是可持久化。可持久化定义可持久化是指一个数据结构在修改操作(如插入、删除、更新)后,仍然,并且能够同时访问修改前和修改后的历史版本。每次修改操作不会直接覆盖原有数据,而是创建新版本。旧版本的数据结构不会被销毁,与新版本共存。程序可以随时查询或访问任何一个已保存的历史版本,就像它们从未被修改过一样。

yjfyjfyjf54188的博客 1734

洛谷P3835 【模板】可持久化平衡树(FHQ Treap)

题面 传送门 题解 可持久化一下就好了,具体可以看代码 这里有一个小\(trick\)就是我们原本在\(merge\)的时候也要新建节点的,但是我们\(merge\)之前一般已经\(split\)过了,需要的节点全都建起来了,所以不需要再新建了 //minamoto #include<bits/stdc++.h> #define R register #define inline __...

weixin_34306446的博客 198

Codeforces Round #740 (Div. 2) F. Top-Notch Insertions 线段树 / 平衡树 + 组合数学

传送门 文章目录题意:思路: 题意: 思路: 考虑最终的序列是什么鸭子的,首先序列肯定单调不降,也就是a1≤a2≤a3≤...≤ana_1\le a_2\le a_3\le ...\le a_na1​≤a2​≤a3​≤...≤an​,显然不可能都是$\le 号,因为如果插入的话是有可能产生号,因为如果插入的话是有可能产生号,因为如果插入的话是有可能产生<号的。假设我们现在有号的。假设我们现在有号的。假设我们现在有x个个个<$ 号,那么应该有(n+n−1−xn)\binom{n+n-1-x}{n}

m0_51068403的博客 433

codeforces 702F T-shirt

题目大意给出n件T-shirt的重要程度q[i]和花费c[i],有k个人最开始分别有b[i]的金钱,每个人的选衣服的策略都是一样的:将所有T-shirt按照重要程度从大到小排序,重要程度相同的按花费从小到大排,然后每个人从头开始取T-shirt,如果金钱数大于当前的T-shirt的花费,那么就买下这件衣服,问每个人最多能够买的T-shirt数量。暴力暴力很显然,就是一个个枚举吧。 另外一种暴力是这

samjia2000的博客 1334
上一篇: bzoj 1021 dp
下一篇: codeforces 700D 哈夫曼树 莫队
make_it_for_good
博客等级 码龄11年 13粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值