CF競(jìng)賽題目講解_CF540E(樹(shù)狀數(shù)組)
2022-07-28 15:12 作者:Clayton_Zhou | 我要投稿
//https://codeforces.com/problemset/problem/540/E
//題意:給定一個(gè)連續(xù)的 increasing 無(wú)限序列{1,2,3,4,5,6…},然后給出幾個(gè)區(qū)間,將區(qū)間2端的值進(jìn)行swap,最后求有多少個(gè)逆序?qū)?。?i?<?j and a[i]?>?a[j].
//思路
// 將題目要進(jìn)行交換的點(diǎn)都保存下來(lái),然后再把中間沒(méi)有出現(xiàn)的區(qū)間離散化成一個(gè)點(diǎn),權(quán)值是這段區(qū)間有幾個(gè)數(shù)據(jù)。
/* 例如
2
1 4
5 9?
就可以轉(zhuǎn)化成 1 2 3 4 5 6 . 其中 2代表【2,3】權(quán)值為2,5代表【6,7,8】權(quán)值為3。 */
/* 然后用一個(gè)vecotr保存這些轉(zhuǎn)化后的點(diǎn),vector里面存一個(gè)pair,pair的first代表這個(gè)點(diǎn)的起始值,second代表有多少個(gè)數(shù),
5所代表的【6,7,8】 所以second保存的是3,first保存的是6。
用一個(gè)id數(shù)組存儲(chǔ)轉(zhuǎn)化后的各個(gè)數(shù)在樹(shù)狀數(shù)組中的序號(hào),
然后在vector中查找位置進(jìn)行端點(diǎn)交換,最后id數(shù)組保存的就是交換后的位置,然后逆序求一下逆序?qū)图纯伞?/p>
*/
標(biāo)簽: