AcWing267 莫基亞(CDQ分治)

2022-05-28 15:57:13 字數 942 閱讀 2355

cdq分治不但能解決三維偏序問題,還能將某些問題的動態版本變成靜態。

比如這題是單點修改,區間查詢,這樣我們就可以將輸入的順序當作時間軸,之後進行cdq分治

按x軸排序後,對y進行樹狀陣列加減,這道題就變成了x比他小,並且y也比他小的個數查詢

這題還用到了簡單的容斥原理,也就是二維字首和的思想來求取矩形真正的內容

#include#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int n=2e6+10

;const

int mod=1e9+7

;struct

nodeq[n];

ll tr[n],ans[n];

int lowbit(int

x)void add(int x,intc)}

ll sum(

intx)

return

res;

}bool

cmpb(node a,node b)

void cdq(int l,int

r)

for(i=l;i<=r;i++)

}int

main();

}if(n==2

); ++cnt;

q[cnt]=node;

++cnt;

q[cnt]=node;

++cnt;

q[cnt]=node;}}

cdq(

1,cnt);

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

}

view code

AcWing 26 二進位制中1的個數

輸入乙個32位整數,輸出該數二進位制表示中1的個數。注意 樣例1輸入 9 輸出 2 解釋 9的二進位制表示是1001,一共有2個1。樣例2 輸入 2 輸出 31 解釋 2在計算機裡會被表示成11111111111111111111111111111110,一共有31個1。這道題有個難點是如何處理負數...

Acwing演算法基礎 2 6 差分

原文 原文連線 類似於數學中的求導和積分,差分可以看成字首和的逆運算。差分陣列 首先給定乙個原陣列a a 1 a 2 a 3 a n 然後我們構造乙個陣列b b 1 b 2 b 3 b i 使得 a i b 1 b 2 b 3 b i 也就是說,a陣列是b陣列的字首和陣列,反過來我們把b陣列叫做a陣...

AcWing寒假每日一題 Day26ISBN號碼

每一本正式出版的圖書都有乙個isbn號碼與之對應,isbn碼包括9位數字 1位識別碼和3位分隔符,其規定格式如 x xx x 其中符號 是分隔符 鍵盤上的減號 最後一位是識別碼,例如0 670 82162 4就是乙個標準的isbn碼。isbn碼的首位數字表示書籍的出版語言,例如0代表英語 第乙個分隔...