線段樹 多棵 HDOJ 4288 Coder

2022-05-21 09:26:51 字數 913 閱讀 5863

題目傳送門

題意:集合,add x, del x, 求和

分析:首先,暴力可以過這題。用上線段樹能大大降低時間的消耗,具體就是類似開了5棵線段樹,每個節點都有5個空間,表示該區間的id%5後的和,區間合併右邊的id『 = i + leftnum,子節點要存到sum[o][1]表示%5=1。還需要對資料離線離散化。

//#include #include #include #include #define lson l, mid, o << 1

#define rson mid + 1, r, o << 1 | 1

typedef long long ll;

const int n = 1e5 + 5;

ll sum[n<<2][5];

int cnt[n<<2];

int x[n], x[n];

char str[n][3];

void push_up(int o)

for (int i=0; i<5; ++i)

}void updata(int p, int op, int l, int r, int o)

int mid = l + r >> 1;

if (p <= mid) else

push_up (o);

}int main()

}std::sort (x, x+m);

m = std::unique (x, x+m) - x;

memset (sum, 0, sizeof (sum));

memset (cnt, 0, sizeof (cnt));

for (int i=0; i}}

return 0;

}

hdu 4288 線段樹 離線處理

hdu 4288 題意 給你類似乙個公升序的set結構 add就是加入乙個數 del就是刪除乙個數 sum就是把所有 5 3的位置的數求和 這題我們怎麼入手呢?以前做過一道類似的樹狀陣列開55個的題 這個題其實大同小異 就是對sum陣列表示 5的值我們開個sum 5 那麼你既然是公升序的 我每次ad...

hdu4288 線段樹維護多個sum

題意 給n個有序的數字,三個操作 1 刪除數字x 2 增加數字x 3 求i 5 3的數字之和 i為數字的下標 思路 一開始想水一下,結果超時。先對所有輸入的數字離散化,線段樹維護區間上點的個數和5個sum值,區間合併的時候要注意 左兒子節點和父親節點的關係很容易,右兒子合併的時候與左兒子中的點個數有...

hdu 4288 Coder 成都賽區 線段樹

題意 給出乙個有序集合,3種操作。插入乙個數,刪除乙個數,都保證序列有序。以及求和 其中求和是將下標 5 3的所有數求和 題解 線段樹 離散化 離線處理 一開始也是想的 線段樹 但是 這個和以前的 做過的 乙個線段樹 不同的 是 如果 我們 刪除 乙個 元素後 那麼 他的 下標 將會 改變 比賽是 ...