學習和參考
下面是支援區間修改和區間查詢的zkw線段樹模板,先記下來。
#include #includezkw#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#include
//#include
//#include
//#include
using
namespace
std;
//#pragma gcc optimize(3)
//#pragma comment(linker, "/stack:102400000,102400000")
//c++
#define lson (l , mid , rt << 1)
#define rson (mid + 1 , r , rt << 1 | 1)
#define debug(x) cerr << #x << " = " << x << "\n";
#define pb push_back
#define pq priority_queuetypedef
long
long
ll;typedef unsigned
long
long
ull;
typedef pair
pll;
typedef pair
pii;
typedef pair
p3;//priority_queueq;
//這是乙個大根堆q
//priority_queue,greater>q;
//這是乙個小根堆q
//__gnu_pbds::cc_hash_tableret[11];
//這是很快的hash_map
#define fi first
#define se second
//#define endl '\n'
#define okc ios::sync_with_stdio(false);cin.tie(0)
#define ft(a,b,c) for(int a=b;a <= c;++a) //
用來壓行
#define rep(i , j , k) for(int i = j ; i < k ; ++i)
//priority_queue, greater>que;
const ll mos = 0x7fffffffll; //
2147483647
const ll nmos = 0x80000000ll; //
-2147483648
const
int inf = 0x3f3f3f3f
;const ll inff = 0x3f3f3f3f3f3f3f3fll; //
18const
double pi=acos(-1.0
);template
inline t read(t&x)
/*-----------------------showtime----------------------
*/const
int maxn = 100009
; ll tree[maxn
<< 2],add[maxn<<2
];
int n = 1
,n,m;;
void
build()
void update(int s,int t,int
k)
if(t&1
) }
for(; s; s>>=1,t>>=1
) }
ll query(
int s,int
t)
if(t & 1)
}for(; s;s>>=1,t>>=1
)
return
ans;
}intmain()
else
}return0;
}
線段樹和zkw線段樹
好啦,我們就開始說說線段樹吧 線段樹是個支援區間操作和查詢的東東,平時的話還是蠻實用的 下面以最基本的區間加以及查詢區間和為例 線段樹顧名思義就是棵樹嘛,葉子節點是每個基本點,它們所對應的父親就是它們的和,具體如下圖 但是對於這樣的線段樹來說,操作所需的時間是遠達不到我們的要求的 會被t 因為我們會...
zkw線段樹小結
zkw zkwzk w線段樹作為迴圈式線段樹具有較小的常數.其實樹狀陣列本質上就是線段樹 下標為 1,n 1,n 1,n 預處理乙個2 k n2 k n 2k n.然後總空間為2k 12 2k 1 2 k 1 4n 2 4n 2k 1 4n 後面令k 2 kk 2 k k 2k 那麼乙個葉子x xx...
鏈結 zkw線段樹
資料結構 走近zkw線段樹 一 資料結構 走近zkw線段樹 二 線段樹的擴充套件之 zkw線段樹 include define lc x x 1 define rc x x 1 1 using namespace std const int maxn 100005 int max int a,int...