卿學姐與公主 分塊

2021-09-19 15:39:46 字數 1737 閱讀 5497

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

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

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

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

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

卿學姐的**每次只能攻擊乙個士兵,並造成一定傷害,卿學姐想知道某時刻從ll到rr這個區間內,從開始到現在累計受傷最嚴重的士兵受到的傷害。

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

standard input

第一行兩個整數n,qn,q表示總共有nn個士兵編號從11到nn,和qq個操作。

接下來qq行,每行三個整數,首先輸入乙個tt,如果tt是11,那麼輸入p,xp,x,表示卿學姐攻擊了pp這個位置的士兵,並造成了xx的傷害。如果tt是22,那麼輸入l,rl,r,表示卿學姐想知道現在[l,r][l,r]閉區間內,受傷最嚴重的士兵受到的傷害。

1\le n \le 1000001≤n≤100000

1\le q \le 1000001≤q≤100000

1\le p \le n1≤p≤n

1\le x \le 1000001≤x≤100000

1\le l \le r \le n1≤l≤r≤n

standard output

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

samples

input output

5 42 1 2

1 2 4

1 3 5

2 3 305

note

注意可能會爆int哦

problem id 1324

problem title 卿學姐與公主

time limit 1000 ms

memory limit 64 mib

output limit 64 mib

source 2016 uestc training for data structures

題目鏈結

為什麼用分塊,因為我現在還不會線段樹。只會暴力莽

#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++)

}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;

}

CDOJ 1324 卿學姐與公主 分塊法

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

UESTC 1292 卿學姐種花 (分塊)

題意 給出乙個長度為n的序列,m次操作,操作分為兩種 1.在x的位置上加上數y,在x 1的位置加上數y 1,以此類推,一直到n或者y為0.2.詢問x位置上數字為多少 分析 乍一看像是線段樹,但是貌似又很難用線段樹解決,主要是區間不好處理,而分塊對於這類題目有優勢,在區間上更容易計數,對於每個塊,對於...

CDOJ 1292 卿學姐種花(分塊)

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