線段樹專題 樹上等差數列

2021-09-22 10:20:04 字數 1566 閱讀 4208

題目大意:

思路:線段樹維護區間的a1和an, 公差為1。

/****** poj3468*******/

#include

#define ll long long

using

namespace std;

#define max_node 400005

#define max_ 100005

struct node

node[max_node]

;ll f[max_]

;//記錄節點i的node結構體陣列下標f[i]

ll a1[max_node]

;ll an[max_node]

;void

bt(ll i, ll l ,ll r)

//建樹bt(

(i<<1)

, l,

(l+r)/2

);//建左子樹bt(

(i<<1)

+1,(l+r)/2

+1, r)

;//建右子樹

}void

upadd

(ll i)

}void

up(ll i, ll l, ll r, ll l, ll r)

//更新

upadd

(i);

//把此本節點的add往下移動

ll mid=

(node[i]

.l+node[i]

.r)/2;

//繼續尋找區間

if(r<=mid)

//全在左區間

else

if(l>mid)

//全在右區間

else

}/*************/

ll ans=0;

//記錄每次的查詢結果

/*************/

void

fd(ll i, ll l, ll r)

//查詢

upadd

(i);

//把此本節點的add往下移動

ll mid=

(node[i]

.l+node[i]

.r)/2;

//繼續查詢區間

if(r<=mid)

//全在左區間

else

if(l>mid)

//全在右區間

else

//左右區間都有

}/*********************/

//建樹 bt(1, 1 ,n);節點1-n

//查詢 fd(1, a, b);[a, b]的資訊

//更新 up(1, a, b, c);//把區間的add+=a

intmain()

else

}return0;

}

牛牛的等差數列 線段樹

這裡的突破口在於小於等於25且大於等於3的質數連乘在1e8左右,所以,我們可以在操作上,將其看作對1e8去求模,而不是對每個都進行預處理。時間複雜度 include include include include include include include include include inc...

區間變成等差數列(線段樹)

keven 特別喜歡線段樹,他給你乙個長度為 n的序列,對序列進行m次操作。操作有兩種 1lrk 表示將下標在 l,r 區間內的數字替換成 k,k 1,k r l 2lr 表示查詢區間 l,r 的區間和 第一行兩個整數 n m,表示序列的長度和操作次數 1 n,m 2e5 第二行 n個整數,表示序列...

求和問題(線段樹維護等差數列)

題目描述 你現在有乙個陣列 aa 我們定義如下的兩種操作 1.修改 形如 00 ll rr 效果為對所有 l i rl i r 執行 ai i l 1 ai i l 1 直觀地說就是al 1,al 1 2,al 2 3 ar r l 1al 1,al 1 2,al 2 3 ar r l 1 這個樣子...