题意:有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);elsey=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;
}

codeforces 702F 可持久化平衡树相关推荐

  1. c++自带的可持久化平衡树?rope大法好!(超详细解答 + 5道例题讲解,可直接替代可持久化的线段树、并查集、平衡树!)

    整理的算法模板合集: ACM模板 目录 c++自带的可持久化平衡树?rope大法好! 1. 声明 2. 支持操作 char类型的rope int类型的rope 3. 具体的细节 4. "可持 ...

  2. P3835 【模板】可持久化平衡树

    P3835 [模板]可持久化平衡树 好久没有打平衡树了,赶紧来复习一下,平衡树这种东西还是很有用的,可以很灵活地解决一些问题. fhq_treap 这道题是可持久化的权值平衡树,支持以下几个操作 1. ...

  3. [Luogu 3835]【模板】可持久化平衡树

    Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作(对于各个以往的历史版本): 插入x数 删除x数(若有多个相同的数,因只删除一个,如果没有请忽略该操作 ...

  4. 2020牛客国庆集训派对day8 G-Shuffle Cards(扩展STL容器,rope可持久化平衡树)

    2020牛客国庆集训派对day8 G-Shuffle Cards(扩展STL容器,rope可持久化平衡树) 题目 https://ac.nowcoder.com/acm/contest/7865/G ...

  5. 【Rope大法好】【STL中丧心病狂的可持久化平衡树】

    曾经我不会写平衡树--于是在STL中乱翻--学到了pb_ds库中的SXBK的斐波那契堆.支持kth的set,和--ext/rope 先发一个官方的 说明 (鸣谢maoxiaohan1999): htt ...

  6. Luogu3835 【模板】可持久化平衡树(fhq-treap)

    fhq-treap,也即非旋treap,可以在不进行旋转操作的前提下维护treap.由于不需要旋转,可以对其可持久化. fhq-treap的基本操作是merge和split,并且通过这两个操作实现对t ...

  7. P3835-[模板]可持久化平衡树【无旋Treap】

    正题 题目链接:https://www.luogu.com.cn/problem/P3835 题目大意 一个空可重集,要求支持 插入一个数xxx 删除一个数xxx 询问一个数xxx的排名 询问排名第x ...

  8. codeforces gym-101736 Farmer Faul 平衡树+并查集

    题目 题目链接 题意 给出nnn个整数,其中1≤n≤106" role="presentation" style="position: relative;&qu ...

  9. [模板]可持久化平衡树

    一.题目 点此看题 二.解法 其实可持久化的思路很简单,就是你永远不改原版,而是在新建点上修改. 所以在merge,split\text{merge,split}merge,split的时候用新开的点 ...

最新文章

  1. 查看MYSQL数据库中所有用户及拥有权限
  2. android ant打包
  3. 解决IDEA2020.1版本不兼容Lombok的问题
  4. 咨微关于企业信息门户的设想
  5. linux无线网卡的安装
  6. pyspark.zip/pyspark/worker.py:53: UnicodeWarning: Unicode equal comparison failed to convert both ar
  7. 代码实现从键盘接收一个字符串, 程序对其中所有字符进行排序,例如键盘输入: helloitcast程序打印:acehillostt...
  8. server取出多个最小值 sql_sql语句,需要取出多个字段列中的最大值和最小值
  9. docker 容器 exited_docker常用命令整理
  10. python代码解读器_python文章生成器(附源码+讲解)
  11. 网页小工具(学习中国象棋)
  12. Zabbix、Nagios、Open-Falcon 等开源监控,都能对接的Saas 电话告警平台
  13. 国家标准GB下载网站汇总
  14. 三大云厂商 ARM 架构服务器性能对比
  15. 如何检测网站死链接?
  16. mysql数据库结构导出word_Windows导出MySQL数据库表结构到Word文档-DBExportDoc V1.0 For MySQL...
  17. Lattice Mico8在LMS添加UART
  18. 动态路由id会拼接到地址栏中,如何获取这个id
  19. 【我的OpenGL学习进阶之旅】介绍一下 绘制图元
  20. 西蒙的管理决策理论—《可以量化的…

热门文章

  1. 服务产品化,或许是中国软件的出路
  2. Exception [WinError 995] 由于线程退出或应用程序请求 的解决办法
  3. ros 校验数字签名时出错。此仓库未被更新,所以仍然使用此前的索引文件。
  4. 华为云语音识别:一句话识别API调用
  5. 【Luogu5348】密码解锁(莫比乌斯反演,数论)
  6. 攻防世界Misc-来自银河的信号
  7. java定义类模板_定义模板——函数模板和类模板
  8. token - 令牌
  9. 外贸人需要准备的浏览器插件有哪些?
  10. 微信小程序——给用户发送通知