luogu P2184 貪婪大陸

2022-05-09 12:54:16 字數 1326 閱讀 7351

嘟嘟嘟

這真是一道好題啊……

看起來覺得似曾相識,但就是想不出來區間怎麼合併,最後還是聽lbg巨佬講的……

《高能演算法》

連線段樹都不用,樹狀陣列就行了。

對於修改區間[l, r],分別用樹狀陣列cl, cr維護l和r的字首和。統計的時候就是cl(r) - cr(l - 1)!理解起來就是先找出所有在r之前被修改的區間,然後在減去l之前就結束的區間就行啦!

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10 #include11

using

namespace

std;

12#define enter puts("")

13#define space putchar(' ')

14#define mem(a, x) memset(a, x, sizeof(a))

15#define rg register

16 typedef long

long

ll;17 typedef double

db;18

const

int inf = 0x3f3f3f3f;19

const db eps = 1e-8;20

const

int maxn = 1e5 + 5;21

const ll mod = 1e9 + 7;22

inline ll read()

2327

while(isdigit(ch))

28if(last == '

-') ans = -ans;

29return

ans;30}

31 inline void

write(ll x)

3237

38int

n, m;

3940

intcs[maxn], ce[maxn];

41int lowbit(int

x)42

45void add_s(int

pos)

4649

void add_e(int

pos)

5053

int sum_s(int

pos)

5459

int sum_e(int

pos)

6065

66int

main()

6778}79

return0;

80 }

view code

luogu P2184 貪婪大陸

題目傳送門 233333 本題由萌萌噠的我的同桌推薦 woc為毛bzoj自爆了 詢問區間 l,r 就是求出l點此時的地雷數 l 1,r 中新加的地雷數 l點地雷數 1,l 的左端點數減去 1,l 1 的右端點數 l 1,r 中新加的地雷數 l 1,r 的左端點數 所以詢問 l,r 就是 1,r 的左...

luoguP2184 貪婪大陸

當詢問區間 l,r 中地雷種類數時,我們只需要用 r 前面的區間開頭數量減去 l 前面的區間結尾數量即可.原因很簡單.對於詢問區間 l,r 我們要求它與先前埋下的地雷區間有交的區間數量,所以只要區間 l,r 的 l去掉不合法的 r即滿足要求.所以這個題我們可以使用兩個樹狀陣列來解決.tree 0 維...

luoguP2184 貪婪大陸 題解 樹狀陣列

p2184 貪婪大陸 題目 其實很容易理解就是詢問一段區間內有多少段不同的區間 然後再仔細思索一下會發現 1.只要乙個區間的開頭在乙個節點i的左邊,那麼這個區間包含在區間1 i中。2.只要乙個區間的尾部在乙個節點j的左邊,那麼這個區間肯定不屬於j之後的所有區間 這時候就不難想到用兩個樹狀陣列維護 第...