防守陣地 II 線段樹 區間修改

2021-07-10 11:32:37 字數 1757 閱讀 5437

e - 防守陣地 ii

time limit:3000msmemory limit:32768kb64bit io format:%i64d & %i64u

submit

status

practice

fzu 2171

description

部隊中總共有n個士兵,每個士兵有各自的能力指數xi,在一次演練中,指揮部確定了m個需要防守的地點,指揮部將選擇m個士兵依次進入指定地點進行防守任務,獲得的參考指數即為m個士兵的能力之和。隨著時間的推移,指揮部將下達q個指令來替換m個進行防守的士兵們,每個參加完防守任務的士兵由於疲憊等原因能力指數將下降1。現在士兵們排成一排,請你計算出每次進行防守的士兵的參考指數。

input

輸入包含多組資料。

輸入第一行有兩個整數n,m,q(1<=n<=100000,1<=m<=1000,1<=q<=100000),第二行n個整數表示每個士兵對應的能力指數xi(1<=xi<=1000)。

接下來q行,每行乙個整數x,表示在原始佇列中以x為起始的m個士兵替換之前的士兵進行防守。(1<=x<=n-m+1)

對於30%的資料1<=m,n,q<=1000。

output

輸出q行,每行乙個整數,為每次指令執行之後進行防守的士兵參考指數。

sample input

5 3 32 1 3 1 4123

sample output

635

faq | about virtual judge | 

forum | 

discuss | 

open source pro 模板

#include#define lson l , m ,rt << 1

#define rson m+1 , r , rt << 1 | 1

const int maxn = 100002;

int add[maxn << 2];

int sum[maxn << 2];

void pushup(int rt)

void pushdown(int rt,int m)

}void build(int l,int r,int rt)

int m=(l+r) >> 1;

build(lson);

build(rson);

pushup(rt);

}void update(int l,int r,int c,int l,int r,int rt)

pushdown(rt , r - l + 1);

int m = (l + r) >> 1;

if(l <= m) update(l , r , c , lson);

if(m < r) update(l , r , c , rson);

pushup(rt);

}int query(int l,int r,int l,int r,int rt)

pushdown(rt , r - l + 1);

int m= (l+r) >> 1;

int ret = 0;

if(l <= m) ret+=query(l , r , lson);

if(m < r) ret+=query(l , r , rson);

return ret;

}int main()

}return 0;

}

FZU 2171 防守陣地 II 線段樹

problem 2171 防守陣地 ii 部隊中總共有n個士兵,每個士兵有各自的能力指數xi,在一次演練中,指揮部確定了m個需要防守的地點,指揮部將選擇m個士兵依次進入指定地點進行防守任務,獲得的參考指數即為m個士兵的能力之和。隨著時間的推移,指揮部將下達q個指令來替換m個進行防守的士兵們,每個參加...

線段樹II 區間修改

題意 假設貨架上從左到右擺放了n種商品,並且依次標號為1到n,其中標號為i的商品的 為pi。小hi的每次操作分為兩種可能,第一種是修改 小hi給出一段區間 l,r 和乙個新的 newp,所有標號在這段區間中的商品的 都變成newp。第二種操作是詢問 小hi給出一段區間 l,r 而小ho要做的便是計算...

線段樹 區間修改

我們對於線段樹的區間修改你可以用乙個最傻的辦法迴圈進行單點修改 時間複雜度太高十分麻瓜 所以,我們要用乙個聰明的做法延遲標記 lazy 我們在執行修改指令時,同樣可以在 l pl pr r 的情況下立即返回,只不過在回溯之前向節點p增加乙個標記,標識 該節點曾經被修改過,但其子節點尚未被更新 如果在...