AcWing 245 你能回答這些問題嗎

2021-09-29 15:22:28 字數 1647 閱讀 3469

線段樹單點修改+查詢最大子段和

一邊寫對?

只不過忘了改陣列大小沒看到x

>

yx>y

x>y而已

維護區間和w

ww,區間最大子段和f

ff,從左端點開始的最大子段和lflf

lf,從右端點開始的最大子段和rfrf

rfw

ww照樣維護,f

ff取左兒子和右兒子的max

maxma

x,還要和左兒子的rf+

rf+rf

+右兒子的lflf

lf取m ax

maxma

x,lflf

lf對左兒子的lflf

lf和 左兒子的w+w+

w+右兒子的lflf

lf取m ax

maxma

x,rfrf

rf對右兒子的rfrf

rf和 右兒子的w+w+

w+右兒子的rfrf

rf取m ax

maxma

x,這樣簡單維護起來就好,查詢的時候一樣

#include

#define a 2000010

using

namespace std;

typedef

long

long ll;

struct node tree[a]

;int n, m, opt, a, b;

voidup(

int k)

void

build

(int k,

int l,

int r)

int m =

(l + r)

>>1;

build

(k <<

1, l, m)

;build

(k <<1|

1, m +

1, r);up

(k);

}void

change

(int k,

int pos,

int val)

int m =

(tree[k]

.l + tree[k]

.r)>>1;

if(pos <= m)

change

(k <<

1, pos, val)

;else

change

(k <<1|

1, pos, val);up

(k);

}node ask

(int k,

int l,

int r)

if(l <= m)

return

ask(k <<

1, l, r);if

(r > m)

return

ask(k <<1|

1, l, r);}

intmain

(int argc,

char

const

*ar**)

return0;

}

245 你能回答這些問題嗎

解題思路 由於我們想要logn的時間複雜的情況下得到詢問的答案,並且還要進行修改,為了不超時所以想到了使用線段樹去求最大連續子串行和。線段樹本身是用到了分治的思想,那麼如果用線段樹,我們需要用道哪些東西才能得到正確的答案呢?因為是線段樹,所以我們每乙個序列都需要分成2個子序列。那麼如果我們吧乙個序列...

你能回答這些問題嗎 線段樹

題目 給定長度為n的數列a,以及m條指令,每條指令可能是以下兩種之一 1 1 x y 查詢區間 x,y 中的最大連續子段和,即 2 2 x y 把 a x 改成 y。對於每個查詢指令,輸出乙個整數表示答案。輸入格式 第一行兩個整數n,m。第二行n個整數a i 接下來m行每行3個整數k,x,y,k 1...

面試,你回答過這些提問嗎?

面試過程中,面試官會向應聘者發問,而應聘者的回答將成為面試官考慮是否接受他的重要依據。對應聘者而言,了解這些問題背後的 貓膩 至關重要。本文對面試中經常出現的一些典型問題進行了整理,並給出相應的回答思路和參 讀者無需過分關注分析的細節,關鍵是要從這些分析中 悟 出面試的規律及回答問題的思維方式,達到...