51nod 1394 差和問題

2021-07-08 13:04:57 字數 2205 閱讀 4581

1394 差和問題

基準時間限制:1 秒 空間限制:131072 kb 分值: 80 

難度:5級演算法題

有乙個集合s,初始狀態下有n個元素,對他進行如下操作:

1、向s裡面新增乙個值為v的元素。輸入格式為1 v

2、向s裡面刪除乙個值為v的元素。輸入格式為2 v

3、詢問s裡面的元素兩兩之差絕對值之和。輸入格式為3

對於樣例,

操作3,|1-2|+|1-3|+|2-3|=4

操作1 4之後,集合中的數字為1 2 3 4

操作3,|1-2|+|1-3|+|2-3|+|1-4|+|2-4|+|3-4|=10

操作2 2之後,集合中的數字為1 3 4

操作3,|1-3|+|1-4|+|3-4|=6

input

第一行輸入兩個整數n,q表示集合中初始元素個數和操作次數。(1<=n,q<=100,000)

第二行給出n個整數a[0],a[1],a[2],…,a[n-1],表示初始集合中的元素。(0<=a[i]<=1,000,000,000) 

接下來q行,每行乙個操作。(0<=v<=1,000,000,000)

output

對於第2類操作,如果集合中不存在值為v的元素可供刪除,輸出-1。

對於第3類操作,輸出答案。

input示例

3 5

1 2 3

31 4

32 2

3

output示例

4

106

先思考乙個簡單的問題,給定n個數字,求兩兩之間差的絕對值之和。

這個很明顯先排個序,這樣就可以把絕對值去掉了。然後從小到大統計每乙個和其它組成的差絕對值之和。

再聯絡到本題中。n+q<=2e5,那麼先把所有的資料讀入,最多有2e5種數字,離散化一下,對應到樹狀陣列之中。插入和刪除乙個數字的時候要統計一下這個對答案的影響。

當前數字為x,比當前數字小的有cnt個,總和為sum,那麼這一部分對答案的影響是x*cnt-sum.對於求比當前數字大的數字類似的道理。

總的複雜度是(n+q)log(n+q)。

以後記住了,這種增刪查的樹狀陣列很方便。。。另外,visual c++提交~

**:

#pragma warning(disable:4996)  

#include #include #include #include #include #include #include #include using namespace std;

typedef long long ll;

const int maxn = 100005;

ll n;

ll n, q;

struct o

oper[maxn];

mapma;

ll val[2 * maxn], val2[2 * maxn];

ll ans[2 * maxn], nnn[2 * maxn];

ll exsit[2 * maxn];

ll res_wc;

ll lowbit(ll x)

void add(ll x,ll y)

}void add2(ll v,ll x, ll y)

}ll sum(ll x)

return res;

}ll sum2(ll x)

return res;

}int main()

j = n;

for (i = 1; i <= q; i++) }

n = j;

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

sort(val2 + 1, val2 + j + 1);

k = 0;

for (i = 1; i <= j; i++)

res_wc = 0;

ll temp, temp_a, temp_b, temp_before_sum, temp_after_sum;

ll su = 0;//所有元素的和

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

for (i = 1; i <= q; i++)

else if (oper[i].op == 2)

else

}else

}//system("pause");

return 0;

}

1394 差和問題

1394 差和問題 基準時間限制 1 秒 空間限制 131072 kb 有乙個多重集合s 即裡面元素可以有重複 初始狀態下有n個元素,對他進行如下操作 1 向s裡面新增乙個值為v的元素。輸入格式為1 v 2 向s裡面刪除乙個值為v的元素。輸入格式為2 v 3 詢問s裡面的元素兩兩之差絕對值之和。輸入...

51nod 迷宮問題

1459 迷宮遊戲 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 你來到乙個迷宮前。該迷宮由若干個房間組成,每個房間都有乙個得分,第一次進入這個房間,你就可以得到這個分數。還有若干雙向道路鏈結這些房間,你沿著這些道路從乙個房間走到另外乙個房間需要一些時間。遊戲規定了你的...

51nod編輯距離問題

編輯距離,又稱levenshtein距離 也叫做edit distance 是指兩個字串之間,由乙個轉成另乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。例如將kitten一字轉成sitting sitten k s sittin e i sit...