cal (樹狀陣列)

2021-08-09 01:14:32 字數 674 閱讀 8383

思路:

轉化成考慮每個點的貢獻,乙個點的貢獻存在於左邊比它小的數和右邊比它大的數的任意組合,所以乙個點的貢獻就是左邊比它小的數的個數和右邊比它大的數的個數的乘積,樹狀陣列維護。

#include

#include

#include

#include

#define n 300005

using

namespace

std;

int n, aa[n], b[n], c[n], f[n], g[n];

long

long ans;

void add(int x)

int query(int x)

int main()

sort(b+1, b+n+1);

for(int i=1; i<=n; i++)

aa[i] = lower_bound(b+1, b+n+1, aa[i]) - b;

for(int i=1; i<=n; i++)

memset(c, 0, sizeof(c));

ans = 0;

for(int i=1; i<=n; i++)

cout

<< ans << endl;

return

0; }

樹狀陣列1 樹狀陣列入門

仔細看一下,發現tree的每乙個節點的高度並不是隨意的,而是由它轉成二進位制之後末尾連續零的數量決定的,連續零的數量加1,就是高度,例如 3 11 零的數量為0,加1等於1,所以它的高度就是1 6 110 零的數量為1,加1等於2,所以它的高度就是2 8 1000 零的數量為3,加1等於4,所以它的...

樹狀陣列 瞎bb 樹狀陣列

樹狀陣列是乙個利用一維陣列和位運算組成的求解區間問題的高效資料結構,其構造如圖所示 首先,我們要用它解決單點修改 區間查詢的操作。根據這張圖我們建立乙個陣列bit,下標就是圖中顯示的十進位制數。bit i 就表示了圖中所示的一段區間的和,例如bit 6 sum 5,6 bit 4 sum 1,4 下...

樹狀陣列 二維樹狀陣列模板

樹狀陣列模板 int lowbit int x int add int x,int val int que int x 模板題 題解 include include include using namespace std int c 300000 rank 300000 int n int lowb...