首页 > 其他分享 >CF 1946 F

CF 1946 F

时间:2024-09-22 22:45:40浏览次数:1  
标签:qr ln 1946 sum 调和级数 CF 端点

一道好题。

  • 一定要好好读题,不要看漏。

一个非常非常重要的条件是,\(a\) 是一个排列。这就说明可能会有调和级数之类的做法了。

  • 考虑怎么处理询问 \([l,r]\) 之类的东西。

有一个普遍的思路,就是 \(ans=sol(r)-sol(l-1)\),但是我们发现并不适用。因此朴素的 \(f_i\) 表示 \(1\sim i\) 的答案就可以了,我们必须再加一维状态,设 \(f(l,r)\) 为起点在 \(l\),终点在 \(r\) 的方案数。

如果我们有了 \(f(l,r)\),那么一次询问 \([ql,qr]\) 是要求 \(\sum_{x\ge ql,y\le qr}f(x,y)\) 的和,其实就是一个二位数点问题。

  • 考虑非 \(0\) 的 \(f(l,r)\) 有几个。

因为起点终点固定,那么一定 \(a_l\mid a_r\)。所以合法数量是 \(\sum div(n)\) 个,也就是调和级数 \(\mathcal{O}(n\ln n)\) 级别。

  • 对于单个的 \(f(l,r)\),怎么求。

可以固定左端点或者右端点。固定左端点 \(l\) 更加容易,因为合法的右端点 \(r\) 是找到 \(a_l\) 的倍数,而不是找 \(a_r\) 的因数。转移方程是 \(f(l,r)=\sum_{r'<r}f(l,r')[a_{r'}\mid a_r]\)。但是这个又要找因数了,所以考虑把习惯的 pull 改成 push,即对于 \(f(l,r)\) 考虑他的贡献。这样,他对 \(f(l,r')\) 其中 \(a_r\mid a_{r'},r<r'\) 有贡献。

因此我们有了一个 \(\mathcal{O}(n\ln^2n)\) 的做法。

  • 二维数点的写法。

可以无脑的全部离线下来排序以后 bit 维护,但是发现其实可以从大到小枚举 \(f(l,r)\) 的 \(l\) 的过程中就把他解决掉,这样常数较小并且空间小、更好写。

因此得到了一个时空较为优秀的做法。

submission

标签:qr,ln,1946,sum,调和级数,CF,端点
From: https://www.cnblogs.com/SFlyer/p/18426051

相关文章

  • CF2013E prefix gcd
    给n个数,随意排序,所有前缀的gcd的和的最小值。只想到gcd变化是log次的,所以枚举每个作为开头,然后找让gcd变小的接上。可是这样是\(O(n^2)\).注意,最小的数要放最前面。假设\(x,a_1,a_2....\)和\(a_1,a_2,x...\).(x是最小的)我们有\(x+gcd(a_1,x)\leqa_1\),因为gcd的求法是\(a_......
  • CF1239E Turtle 题解
    Description一只乌龟从\(2\timesn\)的棋盘的左上角走到右下角,只能往下或往右,需要给出一种方案来分配\(2n\)个数字使得乌龟走过的路径上的数之和的最大值最小。\(2\leqn\leq25,0\leqa_{1,i},a_{2,i}\leq5\times10^4\)。Solution设\(pre_{i}=\sum_{j=1}^{i}{a_{1,i}......
  • 第31次CCF-CSP认证考试 第一题 坐标变换(其一)满分题解
    第31次CCF-CSP认证考试第一题坐标变换(其一)写在前面的话这道题偏简单,我们废话不多说,直接上代码。老系统的链接:旧系统(不过只有第三十二次以及之前的,第三十三及以后的只能在新系统里提交查看分数)。代码#include<iostream>usingnamespacestd;intmain(){ intn,m; ......
  • CF 231 E Cactus 题解(仙人掌图上找环)
    codeforces提交记录题意有一个点仙人掌图(每个点都只属于至多一个简单环),给出kkk个询问,问点x......
  • 联诚发LCF新加坡ITC云仓启航,国际演艺市场的黑马强势突围!
    在全球范围内,演出市场正经历着前所未有的繁荣。从国际巨星的巡回演唱会到地方文化的艺术节,各类演出活动正吸引着成千上万的观众。特别是在新加坡,这个多元文化的交汇点,演出市场的热情更是高涨。随着经济的复苏和人们对于文化娱乐需求的增加,新加坡的演出市场呈现出供需两旺的局面,为消......
  • CCF-CSP资格认证题解系列——第1次第1题相反数
    #include<iostream>usingnamespacestd;intcnt;//N个非零且各不相同的整数intmain(){ intn; cin>>n; inta[n]; for(inti=0;i<n;i++){ cin>>a[i]; } for(inti=0;i<n;i++){ for(intj=i+1;j<n;j++){ if(a[i]+a[j]==0){ cnt++; ......
  • CF538H Summer Dichotomy 题解
    自己做的\^w^/。对于\(m\)个限制,我们得到了一个图,若不是二分图则无解,否则对于每个连通块有\([l_1,r_1],[l_2,r_2]\)的限制,表示对于两组的人数限制(注意此处\(1,2\)并不代表组\(1\),\(2\))。不妨令\(n_1\gen_2,(r_1>r_2\operatorname{or}r_1==r_2\operato......
  • CF538G 题解
    CF538G题意\(s\)为长为\(l\)的由U、L、D、R组成的操作序列,一个机器人从\((0,0)\)开始按照\(s_{1\siml}\)的顺序循环行动\(+\infty\)次。给定n个形如\((t_i,x_i,y_i)\)的限制,表示第\(t_i\)时刻到达\((x_i,y_i)\)。构造\(s_{1\siml}\)。思路首先可以......
  • CF1977E 题解
    根据Dilworth定理,该图能被两条互不相交的链覆盖。从小到大加点。我们现在需要维护两个栈,每个栈维护每条链的点。若两个栈头没有连边,那么对于新加入的点,一定可以放到其中一个栈。现在唯一的问题是,新加入的点可能可以放入两个栈。我们可以再开一个栈三,用来维护以上述点为头的......
  • CCF31-1
    题目描述输入输出格式样例代码#include<stdio.h>#include<stdlib.h>#defineu100intmain(){intn,m,i,j,a[u][u],b[u][u];scanf("%d%d",&n,&m);for(i=0;i<n;i++)scanf("%d%d",&a[i][0],&a[i][1......