題目大意:
思路:線段樹維護區間的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 這個樣子...