4630 no pain no game 樹狀陣列

2022-05-15 22:03:56 字數 1362 閱讀 7294

題目連線:

題意:給你n個數,然後給你m個詢問,每個詢問包含乙個l 乙個r,問你lr 這個區間中任意兩個數最大的公約數。

思路:以為是l,r所以,只跟l後面的有關,所以把詢問排序,陣列a從後往前列舉約數,標記下這個約數最早出現的位置,如果這個約數出現了,那就讓這個數更新一下最大的儲存在樹狀陣列中,如果沒出現,那麼就標記一下位置就好~這樣的後面的答案會影響前面的但是前面的不會影響後面的。

1 #include 2 #include 

3 #include 4 #include 5 #include 6 #include 7 #include 8

#define loop(s,i,n) for(i = s;i < n;i++)

9#define cl(a,b) memset(a,b,sizeof(a))

10#define lowbit(x) x&-x

11using

namespace

std;

12struct

node

13q[50050

];16

intn;

17int cmp(const

struct node a,const

struct

node b)

1821

22int a[50050

];23

int pre[50050

];24

int c[50050

];25

26void update(int x,int

d)2733}

3435

int getres(int

x)36

4344

return

res;

4546}47

int ans[50050

];48

intmain()

4972

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

7475 cl(c,0

);76 cl(pre,-1

);77

78for(i = n;i > 0; i--)

7995}96

}97while(cnt < m && q[cnt].l ==i)

98102

}103

104 loop(0

,i,m)

105 printf("

%d\n

",ans[i]);

106}

107}

108return0;

109 }

view code

Binary Indexed Tree 樹狀陣列

做leetcode 做到meetingroomii的時候我知道不用線段樹或者樹狀陣列是不太好搞了。還是來學習一下吧。樹狀陣列算是線段樹的一種特殊情況 子集 所以樹狀陣列能解決的問題線段樹一定能做,但線段樹能做的樹狀陣列不一定能做。對乙個陣列進行如下操作 update i1,i2,operation ...

數星星 樹狀陣列

題目描述 天空中有一些星星,這些星星都在不同的位置,每個星星有個座標。如果乙個星星的左下方 包含正左和正下 有 k 顆星星,就說這顆星星是 k 級的。例如,上圖中星星 5 是 3 級的 1,2,4 在它左下 星星 2,4 是 1 級的。例圖中有 1 個 0 級,2 個 1 級,1 個 2 級,1 個...

數星星(樹狀陣列)

天空中有一些星星,這些星星都在不同的位置,每個星星有個座標。如果乙個星星的左下方 包含正左和正下 有 k 顆星星,就說這顆星星是 k 級的。例如,上圖中星星 5 是 3 級的 1,2,4 在它左下 星星 2,4 是 1 級的。例圖中有 1 個 0 級,2 個 1 級,1 個 2 級,1 個 3 級的...