ennmm...bitset能過系列。
莫隊+bitset \(\mathcal(m\sqrt n + \frac)\)
維護乙個正向的bitset mem
,再維護乙個反向的bitset mem1
,即mem1[n-x]=mem[x]
;
對於 \(-\) 直接mem&mem<\(x\) 的兩個點 與 一下
對於 \(+\) 直接mem&mem1<<(n-x)因為原來mem[i]
代表i
,mem1[i]
代表n-i
,所以沒有位移時對應位置 與 一下就是是否存在兩個數加起來 \(= n\)
對於 \(\times\) 暴力列舉約數即可。
#include#include#include#include#include#include#include#define r register int
using namespace std;
namespace luitaryi const int n=100005;
int n,m,b,mx,a[n],c[n],pos[n];
bool ans[n];
struct node
inline void sub(int x)
inline bool cadd(int x)
inline bool csub(int x) for(r i=1;i<=m;++i) puts(ans[i]?"hana":"bi");
}} signed main()
2019.11.22 P3674 小清新人渣的本願 莫隊 bitset
p3674 小清新人渣的本願 bitset 100005 now1,now2 一鍵了解bitset now1每一位表示第i位是否存在,now2 表示 maxn i位是否存在 1.差為x now1左移 x 位和now1做按位與 存在乙個 1 則 存在 2.和為x now1第 i 位存在,則值為 i 存...
洛谷P3674 小清新人渣的本願
題意 多次詢問,區間內是否存在兩個數,使得它們的和為x,差為x,積為x。n,m,v 100000 解 毒瘤bitset.假如我們有詢問區間的乙個桶,那麼我們就可以做到o n 列舉查詢了。然後我們用bitset優化一下.外面套上莫隊來維護桶。具體來說,差為x可以寫成 a b x 然後我們把bitset...
洛谷P3674 小清新人渣的本願
給定序列a,長度為n,有m次操作,opt表示該次操作型別,l,r表示操作的區間,x表示這次操作的x 選出的這兩個數可以是同乙個位置的數。定義c為每次的x和ai中的最大值,ai 0,每次的x 2。n,m,c 100000 前置技能 思路 對於此類離線的序列問題,想到莫隊演算法,時間複雜度為 o n s...