Magolor的数据结构作业

(CodeForces 706E ~Working routine)
给出一个矩阵,每次操作交换两个子矩阵,求最后状态。

使用链表存储,每次交换后,影响到的之后矩阵边缘的指针,暴力修改。
(~~~~)
(CodeForces 985E ~Pencils and Boxes)
每个铅笔盒至少放(k)个铅笔,每个盒子中的铅笔价值的绝对值之差不能超过(d)。求是否有方案。

放在一个盒子里的铅笔价值是连续的一段,这样一定不劣。使用线段树维护合法的权值起始位置。
(~~~~)
(CodeForces 316E3 ~Summer Homework)
维护一个序列,询问(Fibonacci)数列作为系数乘区间每个元素的和。

常见的区间和维护。可以考虑维护矩阵,实际上没必要,因为有(f[i]=a*f[0]+b*f[1]),其中(a)(b)也是(Fibonacci)数列相邻的数,可以推得规律。
(~~~~)
(CodeForces 1191F ~Tokitsukaze and Strange Rectangle)
平面上给一个点集,你可以用一种上边界为 (y=INF) 的矩形来包含一个子点集,求一共可以包含多少种子点集。

将点排序,主关键字(y)从大到小,副关键字(x)从小到大。树状数组维护横坐标为(x)的有多少点。就可以统计了。
(~~~~)
(Gym 215177H)天天爱射击
小C现在知道了游戏中(n)块木板位置,每个木板有个耐久值,以及知道了(m)个子弹射击位置。现在问你每个子弹射出去以后,有多少木板会碎掉?

以射击位置为时间轴,射击时间(顺序)为权值建立权值线段树并可持久化。枚举木板,在(rt[R])(rt[L-1])相减的树中寻找答案。
(~~~~)
(CodeForces 689D ~Friends and Subsequences)
给定(a)数组和(b)数组,求有多少区间[L,R]使得(min(a[L],a[L+1] cdots a[R]))等于(max(b[L],b[L+1] cdots b[R]))

枚举左端点,倍增求右端点。
(~~~~)
(HDU 5726 ~GCD)
给出数列(a),询问求(gcd(a[L],a[L+1] cdots a[R])),以及整个数列的子区间(gcd)与这个(gcd)相等的有多少个。

倍增预处理(gcd)。枚举子区间起点,由于(gcd)随右端点单调递减,而且递减很快(log)。因此可以二分gcd相等的区间统计个数。
询问时直接回答。

原文地址:https://www.cnblogs.com/lzhAFO/p/11699130.html