HDU4893 線段樹單點 區間更新

2022-09-17 22:33:18 字數 1014 閱讀 8926

題目鏈結[

題意:輸入n、q。表示有n個數,初始化預設這n個數都為零,有q次操作,操作種類分為三種:1、輸入k,d,使得k位置的數加上d。2、輸入l,r,求區間[l,r]的和並輸出。3、輸入l,r,把區間[l,r]內的數都改成斐波拉契數,修改方式為使得fabs[x-f[i]]最小,如果有多個f[i]滿足情況,用最小的那個f[i]。1 ≤ n ≤ 100000, 1 ≤ m ≤ 100000, |d| < 231。

#includeusing

namespace

std;

typedef

long

long

ll;const

int maxn = 100050

;int

n, m;

struct

node

t[maxn

<< 2

];ll f[

150];

void

init()

ll fbi(ll x)

}void pushup(int

id)void pushdown(int

id)}

void build(int id, int l, int

r)

else

}ll sum(

int id, int l, intr)}

void change(int id, int l, int

r)

else

else

if(l >= mid + 1

)

else

pushup(id);

}}void update(int id, int

pos, ll d)

else

}int

main()

else

if(ty == 2

)

else}}

return0;

}

hdu 4893 線段樹 二分fib

這道題題意很清楚 就是線段樹的運用,其中的第三個操作,也就是將乙個數轉變為與這個數相鄰最小fib數 如果直接操作,因為操作次數很多,應該會tle,我們可以在每個樹節點上加個cover變數,如果等於1,那麼表示這個區間裡的數已經是fib數了,不需要再更改了,這樣就避免時間的浪費 標準模板 表示,自己敲...

線段樹HDU 1166(單點增減 區間求和)

應用 區間最值查詢問題 區間求和 連續區間的修改或單點更新 例題 hdu 1166敵兵布陣 線段樹功能 add 單點增減 sum 區間求和 include include include include include include includeusing namespace std defin...

HDU1166 線段樹區間求和,單點更新

problem description c國的死對頭a國這段時間正在進行軍事演習,所以c國間諜頭子derek和他手下tidy又開始忙乎了。a國在海岸線沿直線布置了n個工兵營地,derek和tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數c國都掌握的...