集合论

149.集合论

女生的网名这么多〃 提交于 2020-03-14 11:08:04
集合论是研究集合一般性质的数学分支,它的创始人是康托尔 现代数学中,每个对象(如数,函数等)本质上都是集合,都可以用某种集合来定义,数学的各个分支,本质上都是在研究某种对象集合的性质。集合论已成为现代全部数学的理论基础。 集合论的特点是研究对象的广泛性,它总结出由各种对象构成的集合的共同性质,并用统一的方法来处理。因此,集合论被广泛地应用于各种科学和技术领域。 由于集合论的语言适合于描述和研究离散对象及其关系,所以它也是计算机科学与工程的理论基础,而且在程序设计,数据结构,形式语言,关系数据库,操作系统等都有重要应用。 1.集合 1.1定义 集合:具有某种特殊性质的客体的聚合。 集合用大写的字母标记, 例如:A、B、C…… 元素:属于任何集合的任何客体。 元素用小写字母标记, 例如:a、b、c、…… 注意: ①元素与集合间的关系: 若 a 是集合 S 中的元素,则可写成 a∈ S ;  若b不是集 S 合中的元素,则可写成 b∈ S 。 ②集合 S 的 基数(势) :S中的元素个数。记为 |S| . ③有限集合:集合的基数(元素)是有限的。 无限集合:集合的基数(元素)是无限的。 常用集合符: I m (m≥1) 有限个正数的集合{1,2,3……m} N m (m≥0) 有限个自然数的集合{0,1,2……m} 以上是有限集合,下面是无限集合: N 自然数集合{0,1,2……} I+

HZOJ 集合论

大憨熊 提交于 2019-12-01 17:10:28
考场用的set,代码复杂度很低,时间复杂度$O(sum log)$,一发过了大样例,以为1e6的数据很稳了就没再管( 然后就挂掉了…… ) 考后把set化成unordered_set就A了。其实$sum log$的时间复杂度是没有什么问题,只不过有个细节没有考虑好,考场上以为set赋值和clear的复杂度是O1的,然后就挂掉了。 其实用 unordered_set复杂度也不是很对,瓶颈在于赋值和清空。 题解: 考虑用set s维护,顺便用一个变量sum维护set中数据的和。 对于操作1;考虑B集合中的变量a,在s中find(a),若不存在,插入,sum+=a; 对于操作2:sum=0。考虑B集合中的变量a,在s中find(a),若存在,在另外一个set s1插入a,sum+=a。s=s1,s1.clear()。 本人死于此。 对于操作3,4:对于s中每个数都进行操作显然不可行,那么考虑用一个变量cal维护整体变化值,只需要给操作1,2的a减cal再进行操作即可。 之后考虑怎么不用set实现: 我们并不要求数据有序,显然可以用unordered_set,但是其实可以用常数更小的Hash_map实现。 之后考虑之前的赋值和清空操作:记录一个时间戳即可。 #include<iostream> #include<cstring> #include<cstdio> #include