树状数组成段更新模板
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                树状数组成段更新模板
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                這個成段的編寫復雜度很低,不需要加大空間復雜度,便于處理成段加,詢問每個位置的值的操作:
#include <bits/stdc++.h> using namespace std ; typedef long long ll ; typedef long double ld ; typedef unsigned long long ull ; #ifdef _WIN32 #define LLD "%I64d" #else #define LLD "%lld" #endif #define pi (acos(-1.0)) #define F first #define S second #define lson (o<<1),l,mid #define rson (o<<1|1),mid+1,r #define MP make_pair const double eps = 1e-9 ; const int inf = 0x3f3f3f3f ; const ll INF = (ll)4e18 ;const int M = (int)1e5+10 ; struct BIT {ll u[M] ;int n ;void clr(int _n) { n = _n ;memset (u,0,sizeof(int)*(n+1)) ;}void add (int x , ll v) {for (; x<=n ; x += x&-x) u[x] += v ;}void add (int l , int r , ll v) {add(l,v) ; add(r+1,-v) ;}ll get (int x , ll ret=0) {for (; x>0 ; x -= x&-x) ret += u[x] ;return ret ;} }bit ;int main () {int a[20] = {0,3,7,4,8,9,11,5,4,9,1} ;for (int i=1 ; i<=10 ; i++) printf ("%-4d" , a[i]) ; puts ("");bit.clr (10) ;for (int i=10 ; i>0 ; i--) {a[i] = a[i]-a[i-1] ;bit.add(i,i,a[i]) ;}for (int i=1 ; i<=10 ; i++) printf ("%-4d",a[i]) ; puts ("");for (int i=1 ; i<=10 ; i++) printf ("%-4d" , bit.u[i]) ; puts ("") ;int Q ;scanf ("%d" , &Q) ;while (Q --) {int x ;scanf ("%d" , &x) ;printf ("%d\n" , bit.get(x) ) ;}return 0 ; }
轉載于:https://www.cnblogs.com/get-an-AC-everyday/p/5438755.html
總結
以上是生活随笔為你收集整理的树状数组成段更新模板的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: jsp jdbc mysql增删改查_使
 - 下一篇: t3 修改UFO服务器地址,t3ufo报