某日,百無聊賴的卿學姐開啟了某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 ...