题目链接:

[TJOI2019]甲苯先生的滚榜

要求维护一个二维权值的集合并支持单点修改,用平衡树维护即可。

因为$n\le 10^6$但$m\le 10^5$,所以最多只有$10^5$个人被操作。

记录每个人的二维权值,只维护被操作过的人权值的平衡树即可。

如果一开始将$10^6$个人都建出来会$TLE$。

#include<set>
#include<map>
#include<queue>
#include<cmath>
#include<stack>
#include<vector>
#include<bitset>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef unsigned int ui;
int ls[100010];
int rs[100010];
int r[100010];
int v[100010];
int t[100010];
int size[100010];
int cnt;
int m,T;
ui seed;
int x,y;
int a,b,c;
ui last=7;
ui n;
int ac[1000010];
int tim[1000010];
int root;
ui randNum(ui& seed,ui last,const ui m)
{seed=seed*17+last;return seed%m+1;
}
inline void init()
{cnt=root=0;memset(ac,0,sizeof(ac));memset(tim,0,sizeof(tim));
}
inline int build(int val)
{int rt=++cnt;r[rt]=rand();v[rt]=1;t[rt]=val;size[rt]=1;ls[rt]=rs[rt]=0;return rt;
}
inline void pushup(int rt)
{size[rt]=size[ls[rt]]+size[rs[rt]]+1;
}
inline int merge(int x,int y)
{if(!x||!y){return x+y;}if(r[x]<r[y]){rs[x]=merge(rs[x],y);pushup(x);return x;}else{ls[y]=merge(x,ls[y]);pushup(y);return y;}
}
inline void split(int rt,int &x,int &y,int ac,int tim)
{if(!rt){x=y=0;return ;}if(v[rt]<ac||(v[rt]==ac&&t[rt]>=tim)){y=rt;split(ls[rt],x,ls[y],ac,tim);pushup(y);}else{x=rt;split(rs[rt],rs[x],y,ac,tim);pushup(x);}
}
inline void split2(int rt,int &x,int &y,int k)
{if(!rt){x=y=0;return ;}if(size[ls[rt]]>=k){y=rt;split2(ls[rt],x,ls[y],k);pushup(y);}else{x=rt;split2(rs[rt],rs[x],y,k-size[ls[rt]]-1);pushup(x);}
}
inline void solve()
{scanf("%u%d%u",&n,&m,&seed);for(int i=1;i<=m;i++){x=randNum(seed,last,n);y=randNum(seed,last,n);if(!ac[x]){ac[x]++;tim[x]+=y;int now=build(tim[x]);split(root,a,b,ac[x],tim[x]);root=merge(a,merge(now,b));}else{split(root,a,b,ac[x],tim[x]);split2(b,b,c,1);v[b]++;t[b]+=y;root=merge(a,c);split(root,a,c,v[b],t[b]);root=merge(merge(a,b),c);ac[x]++;tim[x]+=y;}split(root,a,b,ac[x],tim[x]);last=size[a];printf("%d\n",last);root=merge(a,b);}
}
int main()
{scanf("%d",&T);while(T--){init();solve();}
}

转载于:https://www.cnblogs.com/Khada-Jhin/p/10826676.html

[TJOI2019]甲苯先生的滚榜——非旋转treap相关推荐

  1. luogu P5338 [TJOI2019]甲苯先生的滚榜

    传送门 首先,排名系统,一看就知道是原题,可以上平衡树来维护 然后考虑一种比较朴素的想法,因为我们要知道排名在一个人前面的人数,也就是AC数比他多的人数+AC数一样并且罚时少的人数,所以考虑维护那两个 ...

  2. 【题解】Luogu P5338 [TJOI2019]甲苯先生的滚榜

    原题传送门 这题明显可以平衡树直接大力整,所以我要说一下线段树+树状数组的做法 实际线段树+树状数组的做法也很暴力 我们先用树状数组维护每个ac数量有多少个队伍.这样就能快速求出有多少队伍ac数比现在 ...

  3. 4923: [Lydsy1706月赛]K小值查询 平衡树 非旋转Treap

    国际惯例的题面: 这种维护排序序列,严格大于的进行操作的题都很套路...... 我们按照[0,k],(k,2k],(2k,inf)分类讨论一下就好. 显然第一个区间的不会变化,第二个区间的会被平移进第 ...

  4. [Codeforces702F]T-Shirts——非旋转treap+贪心

    题目链接: Codeforces702F 题目大意:有$n$种T恤,每种有一个价格$c_{i}$和品质$q_{i}$且每种数量无限.现在有$m$个人,第$i$个人有$v_{i}$元,每人每次会买他能买 ...

  5. BZOJ3223文艺平衡树——非旋转treap

    此为平衡树系列第二道:文艺平衡树您需要写一种数据结构,来维护一个有序数列,其中需要提供以下操作: 翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 ...

  6. [NOIP]2017列队——旋转treap/非旋转treap

    Sylvia 是一个热爱学习的女孩子.  前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia所在的方阵中有n × m名学生,方阵的行数为 n,列数为m.  为了便 ...

  7. BZOJ1251序列终结者——非旋转treap

    题目描述 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列 要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这样的,真是没技 ...

  8. luoguP5055 【模板】可持久化文艺平衡树 可持久化非旋转treap

    luoguP5055 [模板]可持久化文艺平衡树 可持久化非旋转treap 好题. Code: #include<bits/stdc++.h> using namespace std; # ...

  9. BZOJ1895Pku3580 supermemo——非旋转treap

    题目描述 给出一个初始序列fA1;A2;:::Ang,要求你编写程序支持如下操作: 1. ADDxyD:给子序列fAx:::Ayg的每个元素都加上D.例如对f1,2, 3,4,5g执行"AD ...

最新文章

  1. add python3.7 to path是什么意思_一起读源码:为什么 loguru 的时间 rotation 不能只精确到天...
  2. 为什么不推荐使用存储过程?
  3. 任正非最新内部信:过去只为赚点小钱,现在要用5G+AI战胜美国
  4. Python中的元类(metaclass)
  5. android TextView 带滚动条,和ScrollView 用法(暂时觉得ScrollView滑动速度比较快)
  6. 小蚂蚁学习Redis笔记(13)——Redis之phpredis的安装
  7. Java-- 异常与记录日志
  8. 小米答题题库_拼多多果园答题题库74(每日更新)
  9. 第二节:ES6新增了let关键字,干嘛用的?
  10. 中标麒麟怎么安装deb包_请教,如何制作中标麒麟系统可用的安装包?
  11. Linux下为Calibre书库打中文目录名与文件名补丁
  12. 自制力才是你努力的第一步
  13. python 身高预测
  14. 正方教务系统连接服务器失败,模拟登陆正方教务系统,重定向一直解决不了〉...
  15. hihoCoder 题目答案
  16. Iptables 指南 1.1.19(中文版)(三)
  17. 系统平台淘宝如何安全补单及其操作步骤
  18. PID控制中P、I、D参数的作用是什么(转载)
  19. Bootstrap实战之新闻网
  20. Tiktok shop如何将天猫淘宝速卖通等平台产品一键采集自动刊登上货铺货到店铺上

热门文章

  1. 计算机一级考试试题 文明,XP计算机文明基础模拟试题库1.doc
  2. jquery调取java接口_jQuery方式实现ajax接口调用
  3. eureka同步原理_Eureka工作原理
  4. java读取字节效率最高_Java-IO 字节流的使用和效率比较
  5. linux创建sftp用户并指定访问目录,linux – 创建SFTP用户只能访问一个目录.
  6. 共享windows目录给vm linux,将windows中的文件夹共享给Linux虚拟机
  7. python windows窗口置顶_Python入门:第一个程序“Hello, world”
  8. 通过举例谈谈阻塞赋值与非阻塞赋值的区别
  9. FPGA中有限状态机的状态编码采用格雷码还是独热码?
  10. 3月第一周几个要处理的问题