分治 CDQ BOI2007 摩基亞Mokia

2022-03-30 15:43:26 字數 2121 閱讀 7847

摩爾瓦多的移動**公司摩基亞(mokia)設計出了一種新的使用者定位系統。和其他的定位系統一樣,它能夠迅速回答任何形如「使用者c的位置在哪?」的問題,精確到公釐。但其真正高科技之處在於,它能夠回答形如「給定區域內有多少名使用者?」的問題。

在定位系統中,世界被認為是乙個w*w的正方形區域,由1*1的方格組成。每個方格都有乙個座標(x,y),1<=x,y<=w。座標的編號從1開始。對於乙個4*4的正方形,就有1<=x<=4,1<=y<=4(如圖):

請幫助mokia公司編寫乙個程式來計算在某個矩形區域內有多少名使用者。

有三種命令,意義如下:

命令引數意義0

w初始化乙個全零矩陣。本命令僅開始時出現一次。

1x y a

向方格(x,y)中新增a個使用者。a是正整數。

2x1 y1 x2 y2

查詢x1<=x<=x2,y1<=y<=y2所規定的矩形中的使用者數量

3無引數

結束程式。本命令僅結束時出現一次。

對所有命令2,輸出乙個一行整數,即當前詢問矩形內的使用者數量。

0 41 2 3 3

2 1 1 3 3

1 2 2 2

2 2 2 3 4

輸入輸出

意義0 4

大小為4*4的全零正方形

1 2 3 3

向(2,3)方格加入3名使用者

2 1 1 3 3

查詢矩形1<=x<=3,1<=y<=3內的使用者數量

3查詢結果

1 2 2 2

向(2,2)方格加入2名使用者

2 2 2 3 4

查詢矩形2<=x<=3,2<=y<=4內的使用者數量

5查詢結果

3終止程式

1<=w<=2000000

1<=x1<=x2<=w

1<=y1<=y2<=w

1<=x,y<=w

0命令1不超過160000個。

命令2不超過10000個。

1 #include 2 #include 3 #include 4 #include 5

using

namespace

std;

6const

int maxn=200010;7

const

int maxs=2000010;8

struct

node

13}p[maxn],t[maxn];

14int

bit[maxs],s,op,cnt;

15int

vis[maxs],dep;

16void add(int x,int

d)24}25

int query(int

x)32

return

ret;33}

3435

bool

cmp1(node a,node b)

3839

bool

cmp2(node a,node b)

42void solve(int l,int

r)49

for(int i=l;i<=r;i++)p[i]=t[i];

50 solve(l,mid);++dep;

51for(int i=mid+1,j=l;i<=r;i++)

58 solve(mid+1

,r);

59 t1=l;t2=mid+1;60

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

61if(t2==r+1||p[t1].x];

62else t[i]=p[t2++];

63for(int i=l;i<=r;i++)p[i]=t[i]; 64}

6566

intmain()

76else83}

84 sort(p+1,p+cnt+1

,cmp1);

85 solve(1

,cnt);

86 sort(p+1,p+cnt+1

,cmp2);

87for(int i=1,ret;i<=cnt;i++)

88if(p[i].d==-1)96

return0;

97 }

2 遞迴與分治

遞迴的概念 直接或間接的呼叫自身的演算法稱為遞迴演算法 當乙個函式以及它的乙個變數是由函式自身定義時,稱這個函式是雙遞迴函式。聽不懂,看下面分析 分析 a n,m 的自變數m的每乙個取值都定義了乙個單變數函式。m 0時是 2 m 1時,a 1,1 a a 0,1 1 a 1,0 2,a n,1 a ...

L2 遞推 遞迴 分治

f1 fn 順推法,對應遞推 fn f1 倒推法,對應遞迴 怎麼解決遞推的問題 找到初始狀態 找到遞推公式 開始迴圈算即可 自己找到遞推關係!用遞推的方式求 fibonacci 數列 f 0 0 f 1 1 for int i 2 i n i f i f i 1 f i 2 簡單的排列組合 排列 從...

分治法(2) 最大子段和

題目 給定n個元素的整數列 可能為負整數 a1,a2,an.求形如 ai,ai 1,aj i j 1 n,i j 的子段使其和為最大。當所有整數為負整數時定義其最大欄位和為0。例如當 a1,a2,a3,a4,a5,a6 2,11,1,13,5,2 最大欄位和為i 2,j 4 下標從1開始 如果直接用...