首页 > 其他分享 >CF671C Ultimate Weirdness of an Array

CF671C Ultimate Weirdness of an Array

时间:2023-09-16 09:45:00浏览次数:30  
标签:线段 CF671C Ultimate sum Array CheckMax

区间 max gcd 计数显然没有任何性质,考虑倒序枚举,转化为计算 \(\sum_i\sum_{l,r}[f(l,r)\ge i]\)。

考虑用一个线段树维护这个东西。\(x\) 节点上存最小的满足 \(f(x,r)<i\) 的 \(r\)。那么一次操作只需要全局求和。

我们考虑 \(i+1\to i\) 的过程,显然只有 \(i\) 的倍数会对这些位置产生影响,假设下标序列为 \(p_{1\sim m}\)。

  • \(m = 1\):显然不用管。
  • \(m=2\):我们分几个位置讨论:
    • \([1,p_1]\):这些位置最右端要到 \(p_{m-1}-1\),取多就取不到 \(i\) 了,所以和 \(p_{m-1}\) CheckMax。
    • \([p_1+1,p_2]\):这些位置能取到 \(p_m-1\),所以和 \(p_m\) CheckMax。
    • \([p_2+1,n]\):咋取都行,和 \(n+1\) CheckMax。

注意到线段树维护的序列单调不降,所以直接线段树二分+区间 assign 即可。时间复杂度 \(\mathcal O(nd(n)+w\log n)\)。

标签:线段,CF671C,Ultimate,sum,Array,CheckMax
From: https://www.cnblogs.com/663B/p/17706309.html

相关文章

  • LeetCode-Java题解 209. Minimum Size Subarray Sum
    题目地址:209.MinimumSizeSubarraySum解题思路:    看到这道题,心里本身是有双指针这个概念的,但是不知道怎么用,脑子里第一反应就是暴力解法,双for一把梭,然后时间就超时了...看了题解才知道滑动窗口这个解法,不禁直呼妙啊!感觉和双指针非常类似,其核心点在于避免了暴力算法的枚......
  • arraylist 和linkarray的区别
    arraylist和linkarray的区别ArrayList和LinkedList都是Java中的集合类,它们的主要区别在于底层的数据结构和操作的时间复杂度。数据结构:ArrayList底层使用数组实现,它在内存中是连续存储的,可以通过索引直接访问元素,因此在随机访问元素时效率较高。LinkedList底层使用双向链表......
  • MFC动态数组CArray
             ......
  • C# ArrayPool学习
    ArrayPool是个数组缓冲池,可重复使用,避免频繁的创建和销毁数组,减少CG,提高性能byte[]data=newbyte[200];for(inti=0;i<data.Length;i++){data[i]=(byte)i;//模拟数据}vararrPool=ArrayPo......
  • ES2023 Array new features All In One
    ES2023ArraynewfeaturesAllInOnechangeArraybycopyArray.toReversed()constnumbers=[1,2,3,4,5,6,7,8,9];constreversed=numbers.toReversed();console.log("reversed=",reversed);//reversed=[9,8,7,6,5,4,3,2,1]co......
  • 比较分析Vector、ArrayList和hashtable hashmap数据结构
    线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构。这些类均在java.util包中。本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类。[color=green][b]Collection├List│├LinkedList│├ArrayL......
  • Codeforces Round 781 (Div. 2) B. Array Cloning Technique
    给一个长度为\(n\)的数组\(a\)。开始只有一份所给\(a\)的副本。你可以做以下两种操作:选择任意一个副本并且克隆它,然后将会多出一个克隆副本。交换两个元素,他们属于任意两个副本(可能是同一个)。需要判断最小操作数,使有一个副本的所有元素相同。观察一:只需要在开始的副本......
  • ArrayList和LinkedList的区别
    1.顾名思义,前者底层数据结构采用数组结构,通过索引来实现快速随机访问元素;而后者采用双向链表结构,每个元素都包含一个指向前一个元素和后一个元素的引用,所以插入,删除元素效率很高。2.时间复杂度不同,前者为O1,为常量复杂度,执行一次,后者为On,从头部或尾部开始执行N次。3.前者占用的空......
  • 监听数组Array变化或Obj属性变化
    工作中经常会遇到监听数组发生变化时执行相应的回调触发逻辑,客户应用场景中需要实现对象变量的动态监听,当变量发生变化时触发回调函数,实现事件发送等应用场景。   通常由以下两种方式实现需求一.通过改变对象原型prototype方法实现回调监听//创建一个数组原型对象varar......
  • String、StringBuffer和StringBuilder的区别,ArrayList和linkedList的区别,HashMap和Has
    一、String、StringBuffer和StringBuilder的区别1.1相关介绍String是只读字符串,并不是基本数据类型,而是一个对象。从底层源码来看是一个final修饰的字符数组,所引用的字符串不能改变,一经定义无法再增删改。每次对String操作都会生成新的String对象。所以对于经常改变内容的字符串最......