相關講解鏈結
**(一維)
#include #include #include using namespace std;
long long n,q,c[1000005],a[1000005];
long long lowbit(long long x)
void add(long long x,long long d)
long long ask(long long x)
int main()
for(long long i=1;i<=q;++i)
return 0;
}
**(二維)#include #include #define maxn 4100
using namespace std;
int c[maxn][maxn],n,m;
int lowbit(int x)
void add(int x,int y,int d)
long long ask(int x,int y)
int main()
return 0;
}
**(一維)+(不用差分的 偷懶正解)#include #include #include using namespace std;
long long n,q,a[1000005],c[1000005];
long long lowbit(long long x)
void add(long long x,long long d)
long long ask(long long x)
int main()
else
}return 0;
}
設原陣列為a[i], 設陣列d[i]=a[i]−ai−1,則a[i]=∑ij=1d[j],可以通過求d[i]的字首和查詢。
當給區間[l,r]加上x的時候,a[l] 與前乙個元素 a[l−1] 的差增加了x,a[r+1] 與 a[r] 的差減少了x。根據d[i]陣列的定義,只需給d[l] 加上 x, 給d[r+1] 減去 x 即可。
void add(int p, int x)
void range_add(int l, int r, int x)
int ask(int p)
**(一維)#include #include #include using namespace std;
long long n,q,a[100005],sum1[100005],sum2[100005];
long long lowbit(long long x)
void add(long long x,long long d)
}long long ask(int x)
int main()
while(q--)
else if(f=='c')
}return 0;
}
**(二維)
維護:d[i][j],d[i][j]∗i,d[i][j]∗j,d[i][j]∗i∗j (d[i][j]為a[i][j]差分陣列)
#include #include #define int long long
#define maxn 2050
using namespace std;
int n,m,sum1[maxn][maxn],sum2[maxn][maxn],sum3[maxn][maxn],sum4[maxn][maxn];
int lowbit(int x)
void add(int x,int y,int d)
}int ask(int x,int y)
void addedge(int xa,int ya,int xb,int yb,int d)
int askedge(int xa,int ya,int xb,int yb)
signed main()
return 0;
}
樹狀陣列 模板1 單點修改和區間和
劃重點 先放一篇大佬的部落格,我就直接劃重點了 0 樹狀陣列時間修改值和區間和複雜度log n 用於維護區間和計算區間和。1 a表示原陣列,c表示樹狀陣列,更新值和更新sum都根據二進位制下標,陣列下標最後從1開始 c i a i 2 k 1 a i 其中k為i用二進位制表示時的末尾0的個數。根據規...
樹狀陣列 區間修改 單點查詢
說一下差分 現在我們有乙個從小到大的數列a a 1 3 6 8 9 然後還有乙個差分陣列b b 1 2 3 2 1 對應 1,3 1,6 3,8 6,9 8,相信某些同學絕已經看出端倪了.這裡b i a i a i 1 我令a 0 0,故b 1 a 1 int now 0,temp scanf d ...
樹狀陣列區間修改,單點查詢
普通的單點修改單點查詢就不講了,從區間修改和單點查詢講起。原來的值存在a裡面,多建立個陣列c1,注意 c1 i a i a i 1 那麼求a i 的值的時候a i a i 1 c1 i a i 2 c1 i c1 i 1 c1 1 c1 2 c1 i 所以就用c1建立樹狀陣列,便可以很快查詢a i ...