codeforces 702F 可持久化平衡树

别再翻手册了!用Materials Studio的Forcite模块,5步搞定复杂溶剂的溶解度参数计算 本文详细介绍了如何使用Materials Studio的Forcite模块,通过5个步骤快速计算复杂溶剂的溶解度参数。从分子建模、结构优化到分子动力学采样,再到最终的内聚能密度计算,该方法大幅提升了石油化工和高分子材料研发中的效率,避免了传统手册查阅和实验的繁琐过程。 阅读详情

题意:有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;
}
国科大作业考试资料《人工智能原理与算法》2024新编-第二次作业整理 1、对于下列活动,分别给出任务环境的PEAS描述, 并按2.3.2节列出的性质进行分析: 3、为图2.2中描述的吸尘器世界实现一个可以进行性能度量的环境模拟器。你的实现是必须是模块化的,以使传感器、执行器和环境特征(大小、形状、灰尘放置等)便于修改。 4、实现上述题目真空吸尘器环境中的简单反射Agent。用所有可能的初始灰尘分布和Agent位置,运行环境模拟器和Agent。记录Agent在每种情况下的性能评分和总体平均评分。 阅读详情

相关推荐

银河麒麟V10+QT6.0中文输入法环境搭建全攻略(附镜像加速技巧)

本文提供了在银河麒麟V10操作系统上为QT6.0搭建中文输入法环境的完整实战指南。文章详细介绍了从系统准备、镜像源优化、QT6安装器获取与加速安装,到编译Fcitx5输入法插件依赖库、深度配置环境变量与项目的全流程。重点分享了使用国内镜像源加速安装的技巧,解决了国产化开发中QT应用无法输入中文的常见难题,旨在帮助开发者快速构建稳定高效的开发环境。

weixin_29204749的博客 394

可持久化平衡树 详解

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

White_gugu的博客 925

极智量化平台实战:5分钟教你用Python实现双均线交易策略(附完整代码)

本文详细介绍了如何在极智量化平台上使用Python实现双均线交易策略,包括数据获取、信号生成、回测分析和策略优化。通过完整的代码示例和实战演示,帮助开发者快速掌握量化交易系统的基本原理和应用方法,实现自动化交易。

weixin_29269441的博客 493

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

记录Nvidia AGX Orin的配置日常(二)设置上电自动开机和远程桌面

因为要拿AGX作为机器人的主控板,所以需要给他设置一下通电后无需按电源键就自动开机,然后再配置一下远程桌面。

AutomaticForever的博客 1363

支付宝H5支付唤醒协议全解析:从alipays://到动态orderSuffix的抓取与拼接

本文深入解析支付宝H5支付唤醒协议,从alipays://协议设计到动态orderSuffix参数的抓取与拼接,详细介绍了支付宝H5支付的底层机制。内容包括协议架构剖析、动态令牌生成与捕获、浏览器兼容性解决方案以及安全机制设计,为开发者提供全面的技术指南和实践建议。

weixin_27972919的博客 3509

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

Pinocchio 安装教程|机器人学的必备库

安装pinocchio,不要安装pip3 install pinocchio!

darcsdn 1662

可持久化平衡树

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

weixin_30599769的博客 370

从仿真到打样:PMOS栅极泄放电路设计全流程复盘与三个踩坑点总结

本文详细复盘了PMOS栅极泄放电路从仿真到打样的全流程设计,重点总结了三个关键踩坑点:三极管BE结过压击穿、静态功耗超标和栅极振荡现象。通过优化缓启动电路、改进保护设计和布局调整,最终实现18ms开通时间、190μs关断时间和8μA静态功耗的工业级性能指标,为类似电源开关设计提供实用参考。

weixin_28693683的博客 371

VisualSFM+MeshLab 三维重建全过程记录

VisualSFM+MeshLab 三维重建全过程记录,从下载到运行出结果,以及其中一些可能出现的小问题。通过这两个软件熟悉一下多目立体视觉重建的流程。

何似莫相逢 3万+

可持久化平衡树(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

深入解析ROS 2 Control:从硬件抽象到实时控制的机器人框架实践

本文深入解析了ROS 2 Control机器人控制框架,阐述了其如何通过硬件抽象、控制器管理和实时性保障,解决机器人开发中硬件与软件紧耦合的痛点。文章详细剖析了其三层核心架构与数据流,并通过C++/Python代码示例演示了硬件接口的实现,最后提供了URDF配置、启动文件编写指南以及动态控制器管理、实时优化等高级应用与实战避坑技巧。

mqtt6iot的博客 620

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

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

romiqi 475

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

可持久化线段树/平衡树

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

Se_ren_di_pity的博客 812

ssm框架搭建

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

平衡树与可持久化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
上一篇: 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、付费专栏及课程。

余额充值