来自FallDream的博客,未经允许,请勿转载,谢谢, 由乃有一天去参加一个商场举办的游戏.商场派了一些球王排成一行.每个人面前有几堆球.说来也巧,由乃和你一样,觉得这游戏很无聊,于是决定换一个商场.另一个商场是Deus的,他看到由乃来了,于是想出了一个更有趣的游戏:写数据结构题这个题是这样的: 我们的情人,不过是随便借个名字,用幻想吹出来的肥皂泡,把信拿去吧,你可以使假戏成真.我本来是无病呻吟,漫无目的的吐露爱情---现在这些漂泊不定的鸟儿有地方栖息了,你可以从信里看出来.拿去吧---由于不…
显然能重排为回文串相当于出现次数为奇数的字母不超过一个.考虑莫队,问题在于如何统计添加/删除一位的贡献.将各字母出现次数奇偶性看做二进制数,做一个前缀和一个后缀和.在右端添加一位时,更新区间的前缀.后缀集合,将后缀集合中合法的统计入答案即可.另三种更新类似.复杂度O(26*n√n). 但是这个毒瘤题他不仅卡常还卡空间.捣鼓了半天最后欢快地弃疗了. #include<iostream> #include<cstdio> #include<cmath> #include&l…
莫队的一些套路 Description 由乃有一天去参加一个商场举办的游戏.商场派了一些球王排成一行.每个人面前有几堆球.说来也巧,由乃和你 一样,觉得这游戏很无聊,于是决定换一个商场.另一个商场是Deus的,他看到由乃来了,于是想出了一个更有趣 的游戏:写数据结构题这个题是这样的:   我们的情人,不过是随便借个名字,用幻想吹出来的肥皂泡,把信拿去吧,你可以使假戏成真.我本来是无病呻吟 ,漫无目的的吐露爱情---现在这些漂泊不定的鸟儿有地方栖息了,你可以从信里看出来.拿去吧---由于不是出自…
[BZOJ4810][Ynoi2017]由乃的玉米田 Description 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐.由乃认为玉米田不美,所以她决定出个数据结构题 这个题是这样的: 给你一个序列a,长度为n,有m次操作,每次询问一个区间是否可以选出两个数它们的差为x,或者询问一个区间是否可以选出两个数它们的和为x,或者询问一个区间是否可以选出两个数它们的乘积为x ,这三个操作分别为操作1,2,3选出的这两个数可以是同一个位置的数 Inp…
点此看题面 大致题意: 给你一个字符串,每次给你一段区间,问这段区间内有多少个字符串在重新排列后可以变成一个回文串. 关于莫队 详见这篇博客:莫队算法学习笔记(一)--普通莫队. 关于回文 要使一个字符串在重新排列后可以变成一个回文串,其实只有两种情况: 所有字符都出现了偶数次. 只有一个字符出现了奇数次,其余字符都出现了偶数次. 关于状压 我们可以用一个\(26\)位的二进制数\(sum_i\)表示\(1\sim i\)范围内每一个字符出现的次数是奇数还是偶数,并用\(cnt_i\)存储状态\…
设第i个字母的权值为1<<i,则一个可重集合可以重排为回文串,当且仅当这个集合的异或和x满足x==x&-x,用莫队维护区间内有多少对异或前缀和,异或后满足x==x&-x,这样端点移动的代价为字符集大小+1=27,因此时间复杂度为$O(27n\sqrt{m})$ #include<cstdio> #include<cmath> #include<algorithm> ],*ptr=buf-; int _(){ ,c=*++ptr; )c=*++…
多组询问不强制在线,那么考虑莫队.bitset维护当前区间出现了哪些数,数组记录每个数的出现次数以维护bitset.对于乘法,显然应有一个根号范围内的因子,暴力枚举即可.对于减法,a[i]-a[j]=x移项得a[i]-x=a[j],可以让bitset大力右移取and.对于加法,a[i]+a[j]=x移项得a[i]=x-a[j],维护一个翻转的bitset大力右移取and. #include<iostream> #include<cstdio> #include<cmath&g…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4810 [题目大意] 给出一个数列,有三种区间查询, 分别查询区间是否存在两个数乘积为x,是否存在两个数和为x,以及是否存在两个数差为x, [题解] 我们对于询问进行莫队处理,保存当前区间的权值数组,记为F, 同时保存权值数组的反向数组G 那么存在差为x的情况只要存在一组F[i]&F[i-x]=1即可 存在和为x的情况只要存在一组F[i]&G[M-x+i]即可. 对于乘积为x的情…
点此看题面 大致题意: 给你一段序列,每次询问一段区间内是否存在两个数的差或和或积为\(x\). 莫队算法 看到区间询问+可以离线,首先想到了莫队啊. 但是,在较短的时间内更新信息依然比较难以实现. 于是,我们就要考虑用\(bitset\)了. 关于\(bitset\) 这应该是我第一次使用\(bitset\)吧,所以简单介绍一下它的使用方式. 其作用就相当于存储一个特别大的二进制数.可以把它看成一个\(bool\)数组来使用. 它的好处就在于,它可以直接进行\(\&,|,\text{^},<…
加法和减法的操作都能想到Bitset. 然后发现乘法比较难办,反正复杂度已经是$O(n\log{n})$了 枚举因数也不能更差了,直接枚举就好了. #include <map> #include <ctime> #include <cmath> #include <queue> #include <bitset> #include <cstdio> #include <cstring> #include <iostr…