luogu P5338 [TJOI2019]甲苯先生的滚榜
传送门
首先,排名系统,一看就知道是原题,可以上平衡树来维护
然后考虑一种比较朴素的想法,因为我们要知道排名在一个人前面的人数,也就是AC数比他多的人数+AC数一样并且罚时少的人数,所以考虑维护那两个东西.AC数更多的人数显然可以直接上树状数组.后者的话可以对每一种AC数开值域线段树,存每个罚时有多少人,注意到罚时之和不会超过\(1.5*10^6\),所以动态开点线段树可以轻松解决.然后每次有个人AC数和罚时改变就先在原来的位置-1,然后在新位置+1.每次询问就是树状数组上AC数\(>\)当前AC数的对应区间之和\(+\)对应线段树上罚时\(<\)当前罚时的区间之和
// luogu-judger-enable-o2
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<vector>
#include<cmath>
#include<ctime>
#include<queue>
#include<map>
#include<set>
#define LL long long
#define ui unsigned intusing namespace std;
const int N=1e5+10,M=1e6+10,MX=1500000;
LL rd()
{LL x=0,w=1;char ch=0;while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}return x*w;
}
ui randNum(ui& seed ,ui last,const ui m)
{ seed=seed*17+last;return seed%m+1;
}
ui sd;
int m,n,a[N],b[N],c[M];
void ad(int x,int y){while(x<=n) c[x]+=y,x+=x&(-x);}
int gsm(int x){int an=0;while(x) an+=c[x],x-=x&(-x);return an;}
int s[M*25],ch[M*25][2],rt[M],tt;
void add(int o1,int o2,int x)
{int l=1,r=MX;s[o1]=s[o2]+1;while(l<r){int mid=(l+r)>>1;if(x<=mid){ch[o1][0]=++tt,ch[o1][1]=ch[o2][1];o1=ch[o1][0],o2=ch[o2][0];r=mid;}else{ch[o1][0]=ch[o2][0],ch[o1][1]=++tt;o1=ch[o1][1],o2=ch[o2][1];l=mid+1;}s[o1]=s[o2]+1;}
}
void dec(int o,int x)
{int l=1,r=MX;--s[o];while(l<r){int mid=(l+r)>>1;if(x<=mid) o=ch[o][0],r=mid;else o=ch[o][1],l=mid+1;--s[o];}
}
int quer(int o,int l,int r,int ll,int rr)
{if(ll>rr||!o) return 0;if(ll<=l&&r<=rr) return s[o];int an=0,mid=(l+r)>>1;if(ll<=mid) an+=quer(ch[o][0],l,mid,ll,rr);if(rr>mid) an+=quer(ch[o][1],mid+1,r,ll,rr);return an;
}int main()
{int T=rd(),ans=7;while(T--){m=rd(),n=rd(),sd=rd();for(int i=1;i<=n;++i) c[i]=rt[i]=0;for(int i=1;i<=m;++i) a[i]=b[i]=0;tt=0;for(int i=1;i<=n;++i){int x=randNum(sd,ans,m),y=randNum(sd,ans,m);if(a[x]) dec(rt[a[x]],b[x]),ad(a[x],-1);++a[x],b[x]+=y;int las=rt[a[x]];add(rt[a[x]]=++tt,las,b[x]),ad(a[x],1);ans=gsm(n)-gsm(a[x])+quer(rt[a[x]],1,MX,1,b[x]-1);printf("%d\n",ans);}}return 0;
}
转载于:https://www.cnblogs.com/smyjr/p/10841151.html
luogu P5338 [TJOI2019]甲苯先生的滚榜相关推荐
- 【题解】Luogu P5338 [TJOI2019]甲苯先生的滚榜
原题传送门 这题明显可以平衡树直接大力整,所以我要说一下线段树+树状数组的做法 实际线段树+树状数组的做法也很暴力 我们先用树状数组维护每个ac数量有多少个队伍.这样就能快速求出有多少队伍ac数比现在 ...
- [TJOI2019]甲苯先生的滚榜——非旋转treap
题目链接: [TJOI2019]甲苯先生的滚榜 要求维护一个二维权值的集合并支持单点修改,用平衡树维护即可. 因为$n\le 10^6$但$m\le 10^5$,所以最多只有$10^5$个人被操作. ...
- luogu P5341 [TJOI2019]甲苯先生和大中锋的字符串
传送门 考虑子串以及出现个数,可以发现SAM可以快速知道每种子串的出现次数,即所在状态的\(endpos\)集合大小,然后一个状态对应的子串长度是一段连续区间,所以可以对每个状态差分一下,就能统计答案 ...
- ICPC-TOOLs resolver滚榜单工具使用指南
0.引言: 上周突然临危受命,学校ACM社团要举办校内迎新赛,想要使用滚榜功能让揭晓结果变得更加刺激.奈何本人不打ACM,一开始连滚榜都不知道(苦笑.jpg),不过还是跌跌撞撞把功能实现了,介于网络上 ...
- ACM封榜滚榜技术记录(qduoj)
封榜 在计划时间,关闭management里的contest管理的Real Time Rank和Status,实现封榜. 滚榜 项目开源 (本项目无后端,只有前端~) 1. 得到比赛提交数据 首先进入 ...
- P7519-[省选联考 2021 A/B 卷]滚榜【状压dp】
正题 题目链接:https://www.luogu.com.cn/problem/P7519 题目大意 nnn个队伍,队伍之间按照得分从小到大排名,得分相同的按照编号从小到大排.开始时每个队伍有个初始 ...
- 【洛谷 P5341】 [TJOI2019]甲苯先生和大中锋的字符串(后缀自动机)
题目链接 建出\(sam\),求出parent tree上每个点的\(endpos\)集合大小. 如果等于\(k\),说明到达这个点的都可以.给\((len[fa(i)],len[i]]\)的\(cn ...
- 【状压DP】滚榜(P7519)
正题 P7519 题目大意 n个队伍,排名先按分数排序再按编号排序,每个队伍有一个初始分数 aia_iai,和一个附加分数 bib_ibi 对于一个合法的 bib_ibi 序列,按 bib_ib ...
- 2019各省省选试题选做
2019各省省选试题选做 2019.05.09 把拖了几天的SDOI Day2更了.姑且算是完结撒花? 省份 Day1T1 Day1T2 Day1T3 Day2T1 Day2T2 Day2T3 ZJO ...
最新文章
- 插入排序算法(基于Java实现)
- python私人兼职_python能做什么副业#下班后有哪些兼职副业
- ubuntu14.04管理员密码忘记的解决方法
- 理解python并发编程_Python并发编程很简单
- android谷歌反地理,Android反向地理编码显示不出来!
- 4月14日,微软发布例行月度安全更新
- SVN版本管理系统的使用(CentOS+Subversion+Apache+Jsvnadmin+TortoiseSVN)
- java代码使用Get请求或者Post请求获取网络内容
- java外文文献_spring框架外文文献 PDF 下载
- obtain,get,gain有什么区别
- python sklearn逻辑回归 sgd和lr_LR逻辑回归模型的原理、公式推导、Python实现和应用...
- java的regex_java regex 简单使用
- sdau启航前端第一次作业
- MediaSession和MediaSessionService的交互流程梳理
- บาคาร่า ธุรกิจที่สร้างรายได้ดี
- 高性能服务器架构(High-performace Server Architecture)
- OpenNLP使用小结
- 好用的工具介绍之——免费pdf编辑及英文pdf翻译成中文
- SAP UI5 数据类型(data type) 学习笔记
- git merge --no-ff 和git merge --squash的区别
热门文章
- 流行的9个Java框架介绍:优点、缺点等等
- Using Sqoop 1.4.6 With Hadoop 2.7.4
- 一分钟了解阿里云产品:ESC五大热点技术问题分析
- hive内置函数详解
- hbase 学习(十五)缓存机制以及可以利用SSD作为存储的BucketCache
- Visio 与 Access 2007 的集成应用
- 解读中国杰出CFO之道
- python 表格格式输出_Python笔记---DAY3:格式化输出、for循环、列表操作
- Python机器学习:KNN算法08scikit-learn中的Scaler
- 怎么在linux终端上sed,Linux中如何使用sed命令