好水的題呀,為什麼還是這句話???
額,首先,我們知道要使得
這,還是證一下吧。
我們設於是答案就成了所有區間內偶數個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 儘管陣列中有...