洛谷 P3674 小清新人渣的本願

2022-08-18 22:45:08 字數 751 閱讀 5377

給定乙個長度為 \(n\) 的陣列 \(a\) ,有三種詢問:

1.詢問是否存在 \(a_i+a_j=x(i,j \in [l,r])\)

2.詢問是否存在 \(a_i-a_j=x(i,j \in [l,r])\)

3.詢問是否存在 \(a_i×a_j=x(i,j \in [l,r])\)

我們使用莫隊來解這道題

對於減法, \(a_i-a_j=x\) 化簡為 \(a_i=a_j+x\)

維護乙個bitset存區間內有的值,等價於s&(s<\(1\)

對於加法, \(a_i+a_j=x\) 化簡為 \(a_i-(n-a_j)=x-n\)

和減法一樣,維護乙個bitset存 \(n-x\) 是否出現即可, \(n\) 取最大值

對於乘法,暴力列舉因子即可

#includeusing namespace std;

bitset<100010>bi,bii;

int n,m,k,a[100010],to[100010],cnt[100010],ans[100010];

struct node

bool operator<(const node&a)const

else if(q[i].opt==3)

}for(int i=1;i<=m;i++)

if(ans[i])puts("hana");

else puts("bi");

return 0;

}

洛谷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...

洛谷P3674 小清新人渣的本願

題目大意 給你 n 個數,m 個詢問 n,m leqslant 10 5 有三種 1 l r x 詢問區間 l,r 內有沒有兩個數相減等於 x 2 l r x 詢問區間 l,r 內有沒有兩個數相加等於 x 3 l r x 詢問區間 l,r 內有沒有兩個數相乘等於 x 注意,兩個數字置可以相同 題解 ...