BZOJ5509: [Tjoi2019]甲苯先生的滚榜】的更多相关文章

题解 开n个平衡树对每个AC数维护罚时,然后不同AC数用树状数组维护即可. 其实挺好写的...就是评测的时候评的巨久... #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1000010; int T, n, m, cnt[N], tim[N]; namespace Rand { typedef unsigned int ui; ui seed; ui randNum(ui&am…
题目链接: [TJOI2019]甲苯先生的滚榜 要求维护一个二维权值的集合并支持单点修改,用平衡树维护即可. 因为$n\le 10^6$但$m\le 10^5$,所以最多只有$10^5$个人被操作. 记录每个人的二维权值,只维护被操作过的人权值的平衡树即可. 如果一开始将$10^6$个人都建出来会$TLE$. #include<set> #include<map> #include<queue> #include<cmath> #include<sta…
原题链接洛谷P5338 [TJOI2019]甲苯先生的滚榜 题目描述 甲苯先生在制作一个online judge,他发现做比赛的人们很关心自己的排名(显而易见),在acm赛制的比赛中,如果通过题目数量不相等,则通过题目数量多的人排名更靠前,如果通过题目数量相等, 则罚时更少的人排名更高.甲苯先生想让大家帮忙设计一个程序,每次有人通过之后,就告诉他排名在他的前面有多少人.(不包括和他罚时题数都相同的同学) 输入输出格式 输入格式: 第一行输入一个整数T表示样例数. 对于每一个样例:输入三个整数m,…
原题传送门 这题明显可以平衡树直接大力整,所以我要说一下线段树+树状数组的做法 实际线段树+树状数组的做法也很暴力 我们先用树状数组维护每个ac数量有多少个队伍.这样就能快速求出有多少队伍ac数比现在这个队伍ac数多 我们再用\(n\)棵动态开点的线段树,第\(i\)棵线段树维护的是ac数为\(i\)的队伍的罚时情况.当一个队伍ac数为\(x\)罚时为\(t\)时,就在第\(x\)棵线段树\(t\)上加一.这样就能快速求出有多少队伍ac数与现在这个队伍ac数相同且罚时更少 当一个队伍过了一题后就…
传送门 首先,排名系统,一看就知道是原题,可以上平衡树来维护 然后考虑一种比较朴素的想法,因为我们要知道排名在一个人前面的人数,也就是AC数比他多的人数+AC数一样并且罚时少的人数,所以考虑维护那两个东西.AC数更多的人数显然可以直接上树状数组.后者的话可以对每一种AC数开值域线段树,存每个罚时有多少人,注意到罚时之和不会超过\(1.5*10^6\),所以动态开点线段树可以轻松解决.然后每次有个人AC数和罚时改变就先在原来的位置-1,然后在新位置+1.每次询问就是树状数组上AC数\(>\)当前A…
问题描述 LG5338 LOJ3105 BZOJ5509 题解 建立一棵\(\mathrm{Treap}\),把原来的\(val\)换成两个值\(ac,tim\) 原来的比较\(val_a<val_b\)改成(设两个结点分别为\(node_a,node_b\)): 1.若\(ac_a>ac_b\),则\(node_a<node_b\) 2.若\(1\)不成立,若\(ac_a=ac_b,tim_a<tim_b\),则\(node_a<node_b\) 3.若\(1,2\)均不成…
题目链接 问题分析 参照数据范围,我们需要一个能够在\(O(n\log n)\)复杂度内维护有序数列的数据结构.那么平衡树是很好的选择.参考程序中使用带旋Treap. 参考程序 #pragma GCC optimize( 3 ) #include <cstdio> #include <ctime> #include <algorithm> namespace Treap { struct member { int Number, Time; bool operator…
题目链接: [TJOI2019]甲苯先生和大中锋的字符串 对原串建后缀自动机并维护$parent$树上每个点的子树大小,显然子树大小为$k$的节点所代表的子串出现过$k$次,那么我们需要将$[len[fa[i]]+1,len[i]]$这一段区间的数目都$+1$,只需要差分即可,最后求前缀和并求出所有前缀和的最大值的位置即为答案. #include<set> #include<map> #include<queue> #include<stack> #incl…
题目链接: [TJOI2019]甲苯先生的字符串 我们用一个$26*26$的$01$矩阵记录任意两个字符是否能相邻. 设$f[i][j]$表示处理完前$i$个字符,第$i$个字符为$j$的方案数. 可以发现将$f[i]$这个$1*26$的矩阵与$26*26$的$01$矩阵相乘即可得到$f[i+1]$的矩阵. 直接将$01$矩阵矩乘即可. 注意题目中要求的不能相邻是指不能按原顺序相邻,即$s1$中有$ab$但$s2$中可以有$ba$. #include<set> #include<map&…
原题链接P5341 [TJOI2019]甲苯先生和大中锋的字符串 题目描述 大中锋有一个长度为 n 的字符串,他只知道其中的一个子串是祖上传下来的宝藏的密码.但是由于字符串很长,大中锋很难将这些子串一一尝试. 这天大中锋找到甲苯先生算命,但是甲苯先生说:“天机不可泄漏”. 在大中锋的苦苦哀求下,甲苯先生告诉大中锋:“密码是在字符串中恰好出现了 kk 次的子串”. 但是大中锋不知道该怎么做,在大中锋再三的恳求下,甲苯先生看其真诚,又告诉他:“在恰好出现了 k 次的子串中,你去按照字串的长度分类,密…