欢迎光临散文网 会员登陆 & 注册

CF竞赛题目讲解_CF540E(树状数组)

2022-07-28 15:12 作者:Clayton_Zhou  | 我要投稿

//https://codeforces.com/problemset/problem/540/E


//题意:给定一个连续的 increasing 无限序列{1,2,3,4,5,6…},然后给出几个区间,将区间2端的值进行swap,最后求有多少个逆序对。即 i < j and a[i] > a[j].


//思路

// 将题目要进行交换的点都保存下来,然后再把中间没有出现的区间离散化成一个点,权值是这段区间有几个数据。

/* 例如

2

1 4

5 9 

就可以转化成 1 2 3 4 5 6 . 其中 2代表【2,3】权值为2,5代表【6,7,8】权值为3。 */


/* 然后用一个vecotr保存这些转化后的点,vector里面存一个pair,pair的first代表这个点的起始值,second代表有多少个数,

5所代表的【6,7,8】 所以second保存的是3,first保存的是6。


用一个id数组存储转化后的各个数在树状数组中的序号,

然后在vector中查找位置进行端点交换,最后id数组保存的就是交换后的位置,然后逆序求一下逆序对就即可。

*/


CF竞赛题目讲解_CF540E(树状数组)的评论 (共 条)

分享到微博请遵守国家法律