返回顶部

随笔分类 -  差分/前缀和

摘要:题意:有$n$个数,你可以任意去除某个位置的元素然后得到一个新数组,使得新数组奇数位和偶数的元素相等,现在问你有多少种情况合法. 题解:先求个后缀和,然后遍历,记录奇数和偶数位置的前缀和,删去$i$位置的元素,意味着原来$i$位置之后的奇数和变成了偶数和,偶数和变成了奇数和,将前缀和与差位的后缀和相 阅读全文
posted @ 2020-10-02 21:47 _Kolibri 阅读(116) 评论(0) 推荐(0)
摘要:题意:有两个$01$字符串$a$和$b$,每次让$a$和$b$进行与运算,将值贡献给答案,然后将$b$右移一位,直到$b=0$. 题解:因为$a$不变,而$b$每次右移一位,所以我们看$b$中$1$的位置在$a$中所对应的位置,从该位置到最低位,所有为$1$的位置都要算一次十进制的数贡献给答案,那么 阅读全文
posted @ 2020-07-11 23:02 _Kolibri 阅读(136) 评论(0) 推荐(0)
摘要:题意:有一排座位,要求每人之间隔$k$个座位坐,$1$代表已做,$0$代表空座,问最多能坐几人. 题解:我们分别从前和从后跑个前缀和,将已经有人坐的周围的位置标记,然后遍历求每一段连续的$0$,对于每一段最多能坐$\lceil len/(k+1) \rceil$,求个和就可. 代码: #includ 阅读全文
posted @ 2020-06-19 12:07 _Kolibri 阅读(207) 评论(0) 推荐(0)
摘要:题意:有一长度为$n$的数组,求一子序列,要求子序列中两两差的绝对值最大,并且子序列尽可能短. 题解:将数组看成坐标轴上的点,其实就是求每个单调区间的端点,用差分数组来判断单调性. 代码: #include <iostream> #include <cstdio> #include <cstring 阅读全文
posted @ 2020-06-15 01:07 _Kolibri 阅读(92) 评论(0) 推荐(0)
摘要:题意:给你一个只含有$0$和$1$的字符串,每次操作可以将$0$改成$1$或$1$改成$0$,问最少操作多少次,使得子序列中不含有$010$和$101$. 题解:仔细想一想不难发现,构造后的字符串要么全是$1$和$0$,要么就是$000....111$和$111...000$,我们对$0$求一个前缀 阅读全文
posted @ 2020-06-04 13:23 _Kolibri 阅读(169) 评论(0) 推荐(0)
摘要:题意:给你一个数组a,定义:若a[i]>a[i]&&a[i]>a[i-1],则a[i]为峰值,求长度为k的区间内峰值最多能为多少,并输出这个区间的左端点(区间需要将峰的左边和右边都包括) 题解:记录每个峰值,然后搞一个后缀和,从前往后枚举长度为k的区间,每次维护一下最多的峰值和区间位置即可. tip 阅读全文
posted @ 2020-04-25 00:01 _Kolibri 阅读(193) 评论(0) 推荐(0)
摘要:题意:给你一个长度为偶数n的数组,每次可以将一个元素修改为不大于k的值,要求每个a[i]+a[n-i+1]都相等,求最少操作多少次 题解:假设每一对的和都为sum,小的记为mn,大的记为mx; 枚举[2,2*k]的所有数x: 我们对每一对相应的数考虑,有三种情况:改一个数,改两个数,不改 1.改一个 阅读全文
posted @ 2020-04-22 12:42 _Kolibri 阅读(249) 评论(0) 推荐(0)