P2357 守墓人 樹狀陣列 線段樹

2021-09-02 07:42:45 字數 2219 閱讀 7765

在乙個荒涼的墓地上

有乙個令人尊敬的守墓人, 他看守的墓地從來

沒有被盜過, 所以人們很放心的把自己的先人的墓

安頓在他那

守墓人能看好這片墓地是必然而不是偶然.....

因為....守墓人懂風水 0.0

他把墓地分為主要墓碑和次要墓碑, 主要墓碑

只能有 1 個, 守墓人把他記為 1 號, 而次要墓碑有

n-1 個,守墓人將之編號為 2,3...n,所以構成了乙個有 n 個墓碑的墓地。

而每個墓碑有乙個初始的風水值,這些風水值決定了墓地的風水的好壞,所以守墓人

需要經常來查詢這些墓碑。

善於運用風水的守墓人,通過一次次逆天改命,使得自己擁有了無限壽命,沒人知道

他活了多久。

這天,你幸運的拜訪到了他,他要求你和他共同見證接下來幾年他的戰果,但不過他

每次統計風水值之和都需要你來幫他計算,算錯了他會要你命 qaq

風水也不是不可變,除非遭遇特殊情況,已知在接下來的 2147483647 年裡,會有 n 次

災難,守墓人會有幾個操作:

1.將[l,r]這個區間所有的墓碑的風水值增加 k。

2.將主墓碑的風水值增加 k

3.將主墓碑的風水值減少 k

4.統計[l,r]這個區間所有的墓碑的風水值之和

5.求主墓碑的風水值

上面也說了,很多人會把先人的墓安居在這裡,而且守墓人活了很多世紀→_→,墓碑

的數量會多的你不敢相信= =

守墓人和善的邀請你幫他完成這些操作,要不然哪天你的旅館**了,天上下刀子.....

為了活命,還是幫他吧

輸入格式:

第一行,兩個正整數 n,f 表示共有 n 塊墓碑,並且在接下來的

2147483647 年裡,會有 f 次世界末日

第二行,n 個正整數,表示第 i 塊墓碑的風水值

接下來 f 行,每行都會有乙個針對世界末日的解決方案,如題所述,標記同題

輸出格式:

輸出會有若干行,對 4 和 5 的提問做出回答

輸入樣例#1:

5 7

0 0 0 0 0

1 1 5 1

1 1 3 3

2 33 1

4 1 5

2 15

輸出樣例#1:

16

7

20%的資料滿足:1≤n≤100

50%的資料滿足:1≤n≤6000

100%的資料滿足:1≤n,f≤2*10^5

思路:這不是裸的線段樹嗎?但是我不會啊........那就用樹狀陣列來搞吧。我的上篇部落格用樹狀陣列實現了線段樹的區間修改區間查詢功能,那就直接拿到這道題上用用。該題需要實現單點查詢、區間查詢、區間修改、單點修改功能,但是我用樹狀陣列只實現了區間與單點查詢。還差乙個單點修改功能,另開乙個陣列實現嗎?注意基礎功能實現是建立在樹狀陣列單點修改區間查詢的基礎上的,所以tree陣列中儲存的是差分值,所以把單點以區間的方式處理,注意需要修改陣列p中tree[i]*(i-1)的字首和。

加輸入掛用時252ms,還行。

樹狀陣列**如下:

#include#include#include#include#includeusing namespace std;

#define inf 0x3f3f3f3f

#define ll long long

#define per(i,a,b) for(long long int i=a;i<=b;++i)

ll int n,m,tree[2000010],p[2000010];

ll int lowbit(ll int k)

void add(ll int x,ll int k,int fag)

}ll int sum(ll int x,int fag)

return s;

}int main()

per(i,1,m)

if(a==2)

if(a==3)

if(a==4)

if(a==5) printf("%lld\n",sum(1,1));

} return 0;

}

線段樹**如下:

差分 樹狀陣列 線段樹 P2357 守墓人

題目描述 p2357 守墓人 敲了一遍線段樹,水過.主要思路 差分 簡單介紹一下差分 詳細概念太麻煩,看下面.給定乙個陣列 7 8 6 5 1 8 18 20 35 瞎敲的emmm 7 1 2 1 3 10 2 15 對應得到差分陣列.我們發現從 1,i 求和,得到的就是我們的原陣列對應值.這就是差...

洛谷P2357 守墓人 線段樹

如果普通暴力做 肯定過不了 那麼我們就要考慮 更高效的 資料結構 比如分塊 線段樹 樹狀陣列等 然後就可以用線段樹過了 要加laz ylazy lazy 標記 比分塊快200ms 200ms 200m s至於主墓的風水和 題目說它是編號1 11 那其實就是區間 1,1 1,1 1,1 的風水和了 就...

洛谷P2357 守墓人

在乙個荒涼的墓地上 有乙個令人尊敬的守墓人,他看守的墓地從來 沒有被盜過,所以人們很放心的把自己的先人的墓 安頓在他那 守墓人能看好這片墓地是必然而不是偶然.因為.守墓人懂風水 0.0 他把墓地分為主要墓碑和次要墓碑,主要墓碑 只能有 1 個,守墓人把他記為 1 號,而次要墓碑有 n 1 個,守墓人...