FZU 2171 防守陣地 II 線段樹

2021-09-30 11:12:07 字數 1584 閱讀 6176

problem 2171 防守陣地 ii

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

輸入包含多組資料。

輸入第一行有兩個整數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。

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

5 3 3

2 1 3 1 412

3635

傳送門:【fzu】2171 防守陣地 ii

題目大意:中文題,不說了。

題目分析:赤果果的區間更新,區間查詢,秒之。

**如下:

#include #include #include using namespace std ;

#define ls ( o << 1 )

#define rs ( o << 1 | 1 )

#define rt l , r , o

#define root 1 , n , 1

#define lson l , m , ls

#define rson m + 1 , r , rs

#define clear( a , x ) memset ( a , x , sizeof a )

#define mid ( ( l + r ) >> 1 )

const int maxn = 100005 ;

int sum[maxn << 2] , del[maxn << 2];

int l , r ;

void pushup ( int o )

void pushdown ( int l , int r , int o )

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

int m = mid ;

build ( lson ) ;

build ( rson ) ;

pushup ( o ) ;

}void update ( int l , int r , int o )

pushdown ( rt ) ;

int m = mid ;

if ( l <= m ) update ( lson ) ;

if ( m < r ) update ( rson ) ;

pushup ( o ) ;

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

void work () }}

int main ()

2171上公升子串行

上公升子串行 problem description 乙個只包含非負整數的序列bi,當b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列,我們可以得到一些上公升的子串行,這裡1 i1 i2 ik n。例如 對於序列,有它的一些上公升子串行,如,等等。這些子串行中序列和最大的是子串行...

CODEVS 2171 棋盤覆蓋

給出一張nn n 100 的西洋棋棋盤,其中被刪除了一些點,問可以使用多少12的多公尺諾骨牌進行掩蓋。錯誤日誌 直接在模板上調整 maxn 時沒有在相應鄰接表陣列位置把陣列大小調整為 maxn maxn 經典的二分圖匹配問題 1 要素 每個點只能被一張骨牌覆蓋 0 要素 將棋盤黑白染色,其對角線格仔...

SDUT 2171 上公升子串行

time limit 1000ms memory limit 65536k 有疑問?點這裡 乙個只包含非負整數的序列bi,當b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列,我們可以得到一些上公升的子串行,這裡1 i1 i2 ik n。例如 對於序列,有它的一些上公升子串行,如,...