LOJ 5516 無聊的數對

2021-10-07 03:58:00 字數 1094 閱讀 3634

好水的題呀,為什麼還是這句話???

額,首先,我們知道要使得

這,還是證一下吧。

我們設於是答案就成了所有區間內偶數個1的個數乘上奇數個1的個數的積。

然後,我們發現資料規模為

時間複雜度是

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define maxn 1000005

typedef long long ll;

#define int ll

typedef pairpii;

#define gc() getchar()

templatevoid read(_t &x)

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

x*=f;

}template_t fabs(_t x)

int n,root,tot;

int lson[maxn],rson[maxn];

int tag[maxn],odd[maxn],even[maxn];

int cal(int x)

int calc(int l,int r)

void insert(int &rt,int l,int r,int al,int ar)

int mid=l+r>>1ll;

if(al<=mid)insert(lson[rt],l,mid,al,ar);

if(ar>mid)insert(rson[rt],mid+1,r,al,ar);

odd[rt]=odd[lson[rt]]+odd[rson[rt]];

even[rt]=even[lson[rt]]+even[rson[rt]];

tag[rt]|=tag[lson[rt]]&tag[rson[rt]];

//printf("%d %d %d %d:%d %d\n",rt,tag[rt],l,r,odd[rt],even[rt]);

}signed main()

return 0;}/*

*/

無聊的數對

點此看題 本題的關鍵是理解 x xor y 的二進位制表示下有奇數個1 如果xx x有奇數個1 11,y yy有奇數個1 11,那麼x y x oplus y x y一定有偶數個1 11,可以發現只有乙個為奇數個1 11,乙個為偶數個1 11的情況異或起來才是奇數個1 11,問題轉化成了在這些區間的...

LOJ 10018 數的劃分

題目鏈結 題目描述 將整數 n 分成 k 份,且每份不能為空,問有多少種不同的分法。當 n 7,k 3 時,下面三種分法被認為是相同的 1,1,5 1,5,1 5,1,1 輸入格式 一行兩個數 n k。輸出格式 一行乙個整數,即不同的分法數。樣例樣例輸入 7 3樣例輸出 樣例解釋 四種分法為 1,1...

陣列中的K diff數對

給定乙個整數陣列和乙個整數k,你需要在陣列裡找到不同的k diff 數對。這裡將k diff數對定義為乙個整數對 i,j 其中i和j都是陣列中的數字,且兩數之差的絕對值是k.示例 1 輸入 3,1,4,1,5 k 2 輸出 2 解釋 陣列中有兩個 2 diff 數對,1,3 和 3,5 儘管陣列中有...