关闭

排序列表

题目大意有若干个区间,C(m)表示所有包含m这个点的区间编号排序后的序列。 求本质不同的非空字典序第k小的序列。做法先离散化,因为本质不同不会超过2n个序列。 接下来顺序扫,并维护每个位置的hash值。 遇到之前出现过的hash值就叉掉。 然后接下来枚举按字典序枚举,每次看看往字典序末尾加入i会有多少种可能。 对于k,如果它不在答案序列中,不能选择它区间所包含的m。 对于k,如果它在答案...
阅读(105) 评论(0)

[bzoj4919]大根堆

题目描述给定一棵n个节点的有根树,编号依次为1到n,其中1号点为根节点。每个点有一个权值v_i。 你需要将这棵树转化成一个大根堆。确切地说,你需要选择尽可能多的节点,满足大根堆的性质:对于任意两个点i,j,如果i在树上是j的祖先,那么v_i>v_j。 请计算可选的最多的点数,注意这些点不必形成这棵树的一个连通子树。解法(不)容易看出这是一个变种LCS。 如果只有一条链就是LCS。 如果多条链...
阅读(127) 评论(0)

Fiend

题目大意满足li<=pi<=ri的排列p,问逆序对是奇数的多还是逆序对是偶数的多或者是否一样多?解法可以构造一个矩阵,ai,li~ri是1,然后就是问它行列式的符号或判断行列式是否为0。 模拟高斯消元,每次消到第i行时,让第i行变成第i列上有1且r最小的,这样可以保证任意时刻1都是一段区间。 可以用可并堆、平衡树或线段树来快速支持合并。#include #include<algo...
阅读(65) 评论(0)

[LibreOJ β Round]ZQC的课堂

题目描述https://www.loj.ac/problem/503题解x和y是可以分开考虑的。 设si表示某维坐标的前缀和。 要求统计多少i满足si*si-1=0且min(si,si-1)<=0。 这样两个限制依然不好统计。 改成用n减去不满足条件的。 1、max(si,si-1)<=0 2、min(si,...
阅读(106) 评论(0)

Informatics Training

题目描述数据结构对每个小组用两个数据结构维护,分别维护体力和刷题量。 对于合并的操作,可以启发式合并。 单个修改直接在对应的数据结构里改。 小组修改可以通过打tag实现,这个tag只有在这个小组被并进另一个小组的时候才下传。注意这个tag是永久化的,因此并进另一个小组时,要把它们对另一个小组的tag进行反作用。 淘汰人可以在对应数据结构进行修改。 为了方便做考核操作,每个小组维护出刷题量最...
阅读(100) 评论(0)

[51nod1558][CF468D]树中的配对

题目大意一颗n个节点的树,边有边权。 求一个字典序最小的排列p 使得∑dis(i,pi)\sum dis(i,pi)最小思考∑dis(i,pi)=∑depi+deppi−2∗deplca(i,pi)=2∗∑depi−2∗∑deplca(i,pi)\sum dis(i,pi)=\sum dep_i+dep_pi-2*dep_{lca(i,pi)}=2*\sum dep_i-2*\sum dep_{...
阅读(220) 评论(0)

[CF765F]Souvenirs

题目大意给定一个序列 多次询问一个区间最接近两个数的差值 最接近的两个数可以相同,但不能是同一个位置上的数。 允许离线强大线段树做法我们首先可以扫描线 从左到右扫,每次处理右端点在扫描线上的所有询问。 我们维护一颗线段树,线段树每个节点的值没有太多实际的意义,但它需要满足一个性质: 假如当前扫描线在now,那么在线段树中查询[l,now]这个区间的答案就是正确的答案 听起来很不可思议?...
阅读(247) 评论(0)

灵知的太阳信仰

题目大意每个位置有两个值ai和bi。 给一个序列分成若干连续段,使得每个段内a值互不相同,代价是b的最大值。求最小代价。DP我们思考设fi表示给1~i分段的最小代价。 我们可以处理出ci表示一个最小的k使得[k,i]没有重复a。 这个随便用个桶就实现了吧。。 那么Fi=mini−1j=ci−1(Fj+max(j+1,i))Fi=min_{j=ci-1}^{i-1}(Fj+max(j+1,i)...
阅读(168) 评论(0)

阿凡达

题目大意一个长度为n的序列,初始全0。有两种操作。 1、将[l,r]重新设置A mod B,2A mod B,3A mod B,4A mod B,5A mod B……(r-l+1)A mod B。 2、求[l,r]的和。前置技能我们如何求∑ni=1iA mod B\sum_{i=1}^niA\ mod\ B? 就是求∑ni=1iA−⌊iAB⌋∗B\sum_{i=1}^niA-\lfloor\f...
阅读(73) 评论(0)

魔道研究

题目大意有3*10^5个多重集合,许多次操作,每次操作往某个集合里插入一个数。对于所有i,把第i个集合里前i大的元素加入集合S中。每次操作后你需要输出集合S中前N大元素的和。模拟模拟题意,用数据结构维护即可。 这里使用spaly。#include #include #define fo(i,a,b) for(i=a;i<=b;i++) using namesp...
阅读(268) 评论(1)

[bzoj4326][NOIP2015]运输计划

题目大意树上有许多条路径,现在你可以将一条边的权值设为0,令所有路径的最大值最小。最长路径瓶颈我们注意到,设为0的边如果不在最长路径上,就不会减小答案。 因此我们可以找出最长路径,把原树转化为一条链+许多树的模型。 预处理出每个点i的from[i]表示由链上哪个点延伸的。 接下来我们可以枚举将链上哪条边变为0,则经过这条边的最长路径一定是最长链,我们只需维护出不经过这条边的最长路径。这个显然可...
阅读(792) 评论(0)

STL中的set和multiset学习小记

注意,请未学习过平衡树的先去学习,再来学这个。 大神勿喷,本人蒟蒻。调用写上#include 有两种,一种是set,另一是multiset。 set是集合,集合内没有相同元素,每个数出现次数0或1。 multiset是多重集,每个元素可以出现多次。 一般调用多重集,这么写。multiset 名称;set也是一样。用处集合与多重集会自动维护所属类型的顺序(我们可以改变它的...
阅读(357) 评论(0)

数树数

题目大意及模型转换给定一棵由N个结点组成的树,现在有两种操作。1、将第i个结点权值改为x。2、询问第i个结点到第j个结点路径上的点有多少个权值为x。N<=100000,操作数Q<=200000。一开始第i个结点权值为v[i]。小感想2103年的题目真是鬼。。。这标题都不知道是什么鬼。。。什么可修改主席树又难打又难跳我还不会!比赛果断使用树上分块大水(分块大法好!)。题解说常熟大,加上我想到的实现方法...
阅读(380) 评论(1)
    个人资料
    • 访问:211293次
    • 积分:9145
    • 等级:
    • 排名:第2014名
    • 原创:689篇
    • 转载:4篇
    • 译文:0篇
    • 评论:181条
    最新评论
    文章分类