7.24XYD比赛

T1:
?
数据结构显然不行吧。这个限制很奇怪
考虑分块和bitset。

bitset会简单一点,注意到值域不大
我们每个点放入它的所有因数,然后分块找到最高的1即可
2000ms?

沿用之前做法,维护区间bitset之和,只有询问啊
预处理\(\frac{n}{w}*(\frac{n}{len})^{2}\)
查询\(n^{\frac{1}{3}}*len+\frac{n}{w}\)

我们发现这个还是很慢,考虑优化查询的,我们每个块维护前后缀
\(\frac{n}{w}*(\frac{n}{len})^{2}+\frac{n}{len}*len*\frac{n}{w}\)
查询\(q*\frac{n}{w}\)
取len=\frac{n}{w} 最优?

我去,假了,考虑莫队。还是开桶,放入一个数的所有因数,然后查询的时候查询最高的超过2的因数。这个后面的操作显然可以分块,那么我们现在希望减少前面的时间。移位耗的时间太长了

还是往分块上想,我们要求这个怎么求?如果要求两部分的话那么我们可以先求两个区间内的,然后再求跨越区间的。那么我们对于每块先求出答案,然后前后缀的答案也求出来。这个是\(\frac{n}{w}*(\frac{n}{len})^{2}+\frac{n}{len}*len*\frac{n}{w}\)
\(q*\frac{n}{w}\)
\(len=\frac{n}{w}\)最优
但是这题只有256MB,明显就是卡我的吧!
3.2e7个ull
我们总空间是\(2n*\frac{n}{w}\)

死了。前后缀优化不了的

75分有吧

也没有!

后缀能优化掉吗?

或者我们利用离线的性质做点文章,
我们可以开n个bitset,那么我们每个询问搞bitset,首先有\((\frac{n}{len})^{2}\)个bitset,然后我们最烦的就是加点的操作,查询时间为\(q*len*n^{\frac{1}{3}}\),预处理时间为 \(n*n^{\frac{1}{3}}+\frac{n}{w}*(\frac{n}{len})^{2}\),空间为\((\frac{n}{len})^{2}*\frac{n}{w}\)

完全过不去!
我们只能开1e4个bitset,现实中可能我们的\(\frac{n}{len}\)\(=80\),那么\(len=500\),查询差不多\(1e8\) 有希望!

唉,貌似哪个地方RE了,会挂掉一点点,如果我们后面询问多了

原来是重载运算符挂掉了,并没有把ans重载进去,然后变量没有赋值,输出就很奇怪了。

然后我们把一个数的因数个数想成log左右的一个东西,反正很少,那么我们的询问就是

\(4e6*len\) 我们的len是\(2e5/95\) 寄,

但是如果我们继续上面的思路,


考虑用线段树维护上面的东西,我们对于每个因数建线段树,然后我们要找到一颗线段树使得其包含两个出现过的相同因数。两个出现过的相同因数我们可以想到记录上一个因数的lst。那么我们现在就有个主席树的做法,然后离线一下就可以了

空间出题人甚至都没想到要来卡我。时间被卡了,不过貌似可以用树状数组上二分。
考虑树状数组p存的是什么,也就是[p-lowbit(p)+1,p],那么我们假如我们初始在p,那么我们从高位向低位做。对于d[i+(1<<j)],因为我们是从高向低位做的,那么d[i+(1<<j)]存的就是[i+1,i+(1<<j)]的信息了。我们做到p其实可能比最终的答案位置靠后的,但是我们最终的答案一定是在p所管辖的区间里面。我们只要保证这个性质即可,这个是简单的。
顺便做一下树状数组查第K大,一样吧。

其实上面树状数组的东西完全就是假的,树状数组做不了找最高位的>=l的操作

这个难道不可以分块吗?我们对值域分块,然后就单点修改了啊,这个很快啊。所以以后这种查询,修改复杂度,或者次数极不平衡的问题我们就可以使用分块了

T2:
感觉现在要训练找规律的能力啊,那么就先不看题解了

我们发现先手必败的情况很少,考虑从这里入手

0 0 0 0 0 0 0
0 0 0 1 1 1 1
0 0 0 2 2 2 2
0 0 0 3 3 3 3
0 0 0 4 4 4 4
1 1 1 0 1 1 1
1 1 1 1 0 0 0
1 1 1 2 3 3 3
1 1 1 3 2 2 2
2 2 2 0 2 2 2
2 2 2 1 3 3 3
2 2 2 2 0 0 0
2 2 2 3 1 1 1
3 3 3 0 3 3 3
3 3 3 1 2 2 2
3 3 3 2 1 1 1
3 3 3 3 0 0 0
4 4 4 0 4 4 4
4 4 4 4 0 0 0

先手败的情况当且仅当这个,注意,在博弈论的题目里我们喜欢猜的结论是偏向异或,相等这种,因为这是nim的结论,我们很难碰到结论是加减法这种的

所以上面三个显然是一样的,考虑绑定来看

0 0 0
0 1 1
0 2 2
0 3 3
0 4 4
1 0 1
1 1 0
1 2 3
1 3 2
2 0 2
2 1 3
2 2 0
2 3 1
3 0 3
3 1 2
3 2 1
3 3 0
4 0 4
4 4 0
如果是加法的话我们为什么没有4 3 1这种情况呢?
所以是3个数异或起来是0
所以我们要求有多少个数\(x\in [l,r],y\in [l,r]\)异或在[l,r]范围内,然后最后再用总的减去即可。这个是很简单的数位dp,首先疯狂容斥变成\(x\in [1,r],y\in [1,r]\)异或在\([1,r]\)。范围内。我们dfs下去,设正常的dp为做到哪一位,然后三个有没有顶到

T3:
如果只有单点查,那么我们考虑dp
f(l,r)=\frac{1}{r-l+1}\sum\limits_{i=l}^{r-1} f(l,i)
使用前缀和优化,这样单次询问是n^2的。我们发现其实询问的点其实很累赘。
g(l,r)=
对于query同理,开写吧
我们发现我们前缀和能直接维护吗?
然后我们发现这个东西其实非常对称,也就是无论你update的是哪里,你都是一样的。那么我们全局n^2求出这个东西即可。我们假设我们是update 1,那么这样会好写一点?然后我们的dp方程只有一维了
f[i]=\sum_{}
为什么每个1不等价啊因为如果我们是update(1),那么传下去的区间就有好多,如果是update(mid),就没这么多
但是我们发现我们答案只和len有关,其实也不是,和上面同样的原因
我们的

posted @ 2025-07-27 18:50  wuhupai  阅读(4)  评论(0)    收藏  举报