P4887 第十四分塊 前體

2022-05-15 18:55:47 字數 1065 閱讀 1065

p4887 第十四分塊(前體)

二次離線莫隊。。新技能get。。

用於可以使用莫隊且單次轉移的效率不是 \(o(1)\) 的情況。

對於每次指標移動,先不直接算,而是把詢問差分然後再次離線詢問。

這樣可以算出每一問對於上乙個詢問的答案的變化量,最後再重新按末對的順序加起來就可以。

#include #define ll long long

using namespace std;

const int n=1e5+10;

int read()

while(ch>='0'&&ch<='9')

return x*f;

}void print(ll x)

int n,m,k,b;

int a[n],be[n];

struct queryq[n];

bool cmp(query x,query y)

};vectorve[n];

int main()

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

sort(q+1,q+1+m,cmp);

for(int i=0;i<16384;++i)

if(__builtin_popcount(i)==k) c.push_back(i);

for(int i=1;i<=n;++i)

//l-- f(x,[x+1,r])=f(x,[1,r])-f(x,[1,x])

if(r>q[i].r) ve[l-1].push_back(p(q[i].r+1,r,q[i].id,1));

while(r>q[i].r)

//r-- -f(x,[l,x-1])=-f(x,[1,x-1])+f(x,[1,l-1])

if(lwhile(l//l++ -f(x,[x+1,r])=-f(x,[1,r])+f(x,[1,x])

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

for(int i=2;i<=m;++i)

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

return 0;

}

洛谷P4887 第十四分塊 前體

題目大意 給定乙個長度為 n 的序列 a k 和 m 次詢問。每次詢問給定區間 l,r 求滿足 l leqslant i j leqslant r 且 text text a i oplus a j k 的數對 i,j 的個數。40mb。解題思路 二次離線莫隊lxl黑科技。對於一次詢問 l,r 我們...

洛谷 P4887 模板 莫隊二次離線

原題鏈結 給定乙個長度為 n 的序列和乙個常數 k 每次詢問乙個區間 l,r 內,有多少對 i,j 滿足 l leq i,且 a i oplus a j 的二進位制表示下恰好有 k 位為 1 資料範圍 1 leq n,m leq 10 5,0 leq a i 2 0 leq k leq 14 按照普...

第十章 圍繞p 與 p 的爭論

對於乙個函式 void func void 我們通常可以定義乙個這樣的函式指標指向它 void p void func 通過p呼叫func時,通常有兩種寫法 p 或者 p 圍繞這兩種寫法,當初c89制定的時候曾經有過爭論。p 是一種舊式的規定,舊式規定圓括號左邊必須具有 函式 型別,如果是指向函式的...