給你乙個序列a,長度為n,有m次操作,每次詢問乙個區間
\(bitset\)的原理是將一大堆值為\(0/1\)的數壓成乙個數。
通過\(i>>x\)等操作,我們可以快速訪問\(i\)陣列右移\(x\)位後的狀態(即只剩右數\(n-x\)個值。
\(bitset\)陣列可以當作乙個數來看待並進行》,<<,&,^等操作(詳見高斯消元總結)。
還有一些\(stl\)函式。
這題顯然只能用莫隊搞啊。
操作三枚枚因數就成,\(o(m\sqrt)\)穩穩的。
操作一二好像會到\(o(n^2)\)?很聳?
發現我們詢問時只要問存在性,即只有\(0/1\)兩種狀態,於是可以\(bitset\)優化一波,\(o(\frac\))強行卡過此題。
// luogu-judger-enable-o2
#include#include#include#include#include#include#include#define ll long long
#define re register
#define il inline
#define fp(i,a,b) for(re int i=a;i<=b;i++)
#define fq(i,a,b) for(re int i=a;i>=b;i--)
using namespace std;
const int n=1e5+10000;
bitsets1,s2;
bool ans[n];
int n,m,blk,num[n],a[n];
struct que
il void add(re int x)
il void del(re int x)
int main()
; }
sort(q+1,q+1+m);
re int l=1,r=0;
fp(i,1,m)
}fp(i,1,m) ans[i]?puts("hana"):puts("bi");
return 0;
}
luogu3674 小清新人渣的本願
目錄本題解法 給定長度為 n 數列 a m 組查詢,問 l,r 內是否有兩個數之和 差 積為 x n,m le 10 5,max le10 5 傳送門我們先來介紹一下 bitset 如果您熟悉bitset請跳至下一章 bitset十分神奇,你可以把它看作乙個支援整體操作的bool陣列。bitset的...
luogu P3674 小清新人渣的本願
題目背景 本題時限3s,空間128mb 我感覺我要掛省選 人渣的本願是乙個有趣的番 可愛的花火喜歡從小和她談 笑 風 生的歐 尼 醬鳴海,歐尼醬特別想當老師,然後劇本安排當了花火的班主任。然而有個叫做皆川茜的奇怪的人搶走了歐尼醬!花火就很失落呀,然後看到乙個叫做麥的人也很失落,原來麥喜歡茜老師。花火...
題解 luogu p3674小清新人渣的本願
題目鏈結 演算法 bitset 莫隊 先把詢問都離線下來,用莫隊判斷每個詢問區間。並維護兩個bitset s 1,s 2 乙個判斷 a i 是否在當前區間內。若 a i 在bitset1中位上的值為true,那 n a i 在bitset2中那一位上也為true。關於操作一,其實就是詢問 是否有兩個...