CDOJ 1324 卿學姐與公主 分塊法

2021-07-27 05:45:44 字數 1579 閱讀 1958

某日,百無聊賴的卿學姐開啟了某11區的某魔幻遊戲

在這個魔幻的遊戲裡,生活著乙個美麗的公主,但現在公主被關押在了魔王的城堡中。

英勇的卿學姐拔出利刃衝向了拯救公主的道路。

走過了荒野,翻越了高山,跨過了大洋,卿學姐來到了魔王的第一道城關。

在這個城關面前的是魔王的精銳部隊,這些士兵成一字排開。

卿學姐的**每次只能攻擊乙個士兵,並造成一定傷害,卿學姐想知道某時刻從l

到r這個區間內,從開始到現在累計受傷最嚴重的士兵受到的傷害。

最開始每個士兵的受到的傷害都是0

input

第一行兩個整數n,q

表示總共有n個士兵編號從1到n,和q

個操作。

接下來q

行,每行三個整數,首先輸入乙個t,如果t是1,那麼輸入p,x,表示卿學姐攻擊了p這個位置的士兵,並造成了x的傷害。如果t是2,那麼輸入l,r,表示卿學姐想知道現在[l,r]

閉區間內,受傷最嚴重的士兵受到的傷害。

1≤n≤100000

1≤q≤100000

1≤p≤n

1≤x≤100000

1≤l≤r≤n

output

對於每個詢問,回答相應的值

sample input and output

sample input sample output

5 4

2 1 2

1 2 4

1 3 5

2 3 30 5

解題方法: 複習分塊,從明天開始開乙個分塊法的專題,給**吧,講解在blibli上有,模仿qsc寫的。

#include 

using

namespace

std;

const

int maxn = 1e5+7;

int belong[maxn], num, l[maxn], r[maxn];

int n, q, block;

long

long a[maxn], max[maxn];

//num 分塊的個數

//block 塊的大小

//belong[i]表示i屬於哪一塊

//l[i]表示i這塊的左端點位置

//r[i]表示i這塊的右端點位置

void build()

r[num] = n;

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

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

}}void update(int x, int y)

long

long query(int x, int y)

return ans;

}for(int i = x; i <= r[belong[x]]; i++)

for(int i = belong[x] + 1; i < belong[y]; i++)

for(int i = l[belong[y]]; i <= y; i++)

return ans;

}int main()

return

0;}

卿學姐與公主 分塊

某日,百無聊賴的卿學姐開啟了某11區的某魔幻遊戲 在這個魔幻的遊戲裡,生活著乙個美麗的公主,但現在公主被關押在了魔王的城堡中。英勇的卿學姐拔出利刃衝向了拯救公主的道路。走過了荒野,翻越了高山,跨過了大洋,卿學姐來到了魔王的第一道城關。在這個城關面前的是魔王的精銳部隊,這些士兵成一字排開。卿學姐的 每...

CDOJ 1292 卿學姐種花(分塊)

思路 由於是乙個區間更新問題,而且更新的值不一樣,所以我們考慮分塊。對於乙個塊,我們維護第i塊的第乙個元素被加了多少了sum i 第i塊被更新了多少次cnt i 那麼對於乙個塊內,元素依次增加sum i 遞減cnt i 這是乙個等差數列。細節參見 include include include in...

CDOJ1329 卿學姐與魔法

附 這道題就是資料結構了 還是比較明顯的優先佇列吧 雖然我想了很久,最後還是看了題解 思路 壓入 a i b 1 最後乙個雙重迴圈拉出佇列 壓入 a i b k k為列舉量 最後佇列裡前n個就是答案 by liucxy include include include include include ...