UOJ Logo kczno1的博客

博客

洛谷5月月赛

2017-05-30 21:50:18 By kczno1

打了这么久,好像第一次rank1啊

t1

我打的50分dp

不过好像加常数优化后可以拿60-70分(我拿了60)

t2

f[i]表示gcd(边权)是i的倍数的方案数

如果把f[i]搞出来了,那么就可以nlogn求出答案。

f[i]其实就是矩阵树n^3求啊

不过加一个,如果不连通就直接退出

我也不会算复杂度

t3

一开始想打fwt拿50分,不知道为什么拿了40

后来想到,就枚举i,j和n,m的二进制的最长公共前缀

之后就可以搞了

t4

就是max-min=r-l

且不存在重复的数

把每对相邻重复的数l,r

以r为下标放到线段树里

就可以了

t5

分治

对两边所有不同的gcd,or暴力枚举

似乎是nlog^3的

但跑的挺快。。

t6

一开始把那个o(N)的方法看了一遍

后来发现构建笛卡尔树空间会开不下

分块 块间st+前后缀min是可以o(1)的

但询问在块内怎么办呢

答案就是块内直接暴力(因为随机,假设块大小为k,那么复杂度就是k/n n k=k * k)

upd:

t5复杂度是nlog的

t4 fwt中间没有取模 爆了long long 加了后拿到50分

评论

期望下不存在块内询问~
评论回复
Lucida:为什么? 不应该是概率\frac {1}{\sqrt N}吗
yanQval:回复 @Lucida:这不就可以忽略了么qwq
Lucida:回复 @yanQval:\dfrac{1}{4000}在2e7组询问还能忽略。。??应该是期望O(1)的啊
yanQval:回复 @Lucida:怎么不能忽略。。。这不就是1/sqrt(N)*Olog?
@yugoslavia
@yugoslavie
@yugoslavie
@yugoslavie
T6由于数据随机,笛卡尔树是可以过的……还相当好写……
评论回复
OldDriverTree:似乎被笛卡尔树打败了啊 本来还以为这个rmq应该是跑得最快的
kczno1:请问有没有笛卡尔树方法的代码啊 我不知道空间如何开得下。。
kczno1:好吧 我把比赛的代码再交一遍就能看t0vd的代码了 请问这样复杂度为什么是O(n)呢
kczno1:好吧 我好像知道了 考虑每层被访问的概率 1+1/2+1/4+..=1
T4我的做法好像不是一个路子的……我用的是随机化算法…… 把序列每个数 ai 表示为一个项 xai,然后随机两组质数 x1,p1x2,p2,分别在模 p1,p2 意义下把 x1,x2 代入求区间和判断是不是 xm(x0+x1++xrl),线段树维护最小值及区间和。 感觉很靠谱,不知道这个做法能不能卡掉。 (另外 @OldDriverTree 题解有一种维护平方和的做法感觉很容易卡掉……?这组数据 8 1 2 2 3 4 5 8 9 9 2 1 8 答案应该是yuanxing)
评论回复
WrongAnswerxm(x0+x1++xrlm 表示区间 [l,r] 最小值。
kczno1:但是他还维护了和 你这个和就不对了吧 等待反例或证明。。
WrongAnswer:回复 @kczno1:把序列改成2 2 5 6 6 7 7 9呢?
OldDriverTree:回复 @WrongAnswer:维护区间hash的做法其实很难卡掉,因为我可以维护和,平方和,乘积等等
WrongAnswer:回复 @OldDriverTreex(x+1)(x+2)(x+k) 有没好的求法?
那个,其实 T1 的 70 分出题人本意不是 dp 的,不过赛时好像大家都卡进去了(
评论回复
WrongAnswer:出题人为什么不放 n 范围 1018k 不大的数据……这样就可以卡暴力DP了……
scPointer:回复 @WrongAnswer:应该只是没想到能卡进去辣。
scPointer:回复 @scPointer:顺便一提这个有 O((n+k)logn)O(klognlogk) 两种写法,
scPointer:回复 @scPointer:所以 n,k 都稍微大一点也可以,比如加个零
scPointer:回复 @scPointer:(uoj 这个字数限制为什么这么卡,这么短一句要分三回发

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。