題目傳送門
題意:集合,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的所有數求和 題解 線段樹 離散化 離線處理 一開始也是想的 線段樹 但是 這個和以前的 做過的 乙個線段樹 不同的 是 如果 我們 刪除 乙個 元素後 那麼 他的 下標 將會 改變 比賽是 ...