树状数组
goto_1600
我何来寂寞,哪有寂寞可言。
展开
-
CF362C Insertion Sort树状数组,思维,枚举
题意:先交换任意两个,然后只能交换相邻两个,问最少操作次数和方案。 思路:由于冒泡排序有个定理就是逆序数的个数等于最少的交换相邻元素的次数,问题就转换为了交换两个数并且使得整个数组逆序数个数最少,我们枚举交换哪两个数,用树状数组处理b[i][j],f[i][j],i之前大于a[j]的个数,i之后小于a[j]的次数,我们交换两个数逆序数就转变为原序列-原来他俩对数组造成的影响+他俩对新序列造成的影响再加1,为什么加1?证明:当a[i]>aj那么交换了就减去了2,多减了1我们加回来,反之小于的话,交换完.原创 2020-09-10 14:35:46 · 359 阅读 · 2 评论 -
P5200 [USACO19JAN]Sleepy Cow Sorting G
题意:给定一个排列 ,每次能让队头移动到后面任意的位置,问最后需要多少步可以变成升序排列。 思路:看到了一个很妙的思路,我们从末尾开始往前面扫如果遇到不是降序的那么它以及它前面的元素都需要往后移动,所以第一个答案就确定了。第二问要输出方案,我们仔细观察,每一头牛需要往后的距离=他后面还没有排队好的牛和已经排队好比他小的牛。如果暴力应该是n^2的,这时候我们想想在查询排队好比他小的牛的时候能不能拿数据结构优化一下,想到了树状数组,因为该题目里只有单点修改和查询区间,那么就好办了。 代码: #include&l原创 2020-09-08 15:31:45 · 353 阅读 · 0 评论 -
244. 谜一样的牛
题意:有n只牛,现在他们按一种顺序排好,现在知道每只牛前面有几只牛比自己低,牛的身高是1-n,现在求每只牛的身高 解题思路:听了y总的课,他讲的是可以用树状数组+二分做,树状数组维护的是前i个比某头牛小的数量总和,初始状态下我们可以把每个高度都维护一下,千万不要跟我一样把tree数组一个一个变成1,那样是不行的,(没有理解树状数组的含义),简便方法就是tr[i]=lowbit(i),然后从后往前枚...原创 2020-04-18 23:39:22 · 291 阅读 · 0 评论 -
数星星
每个星星按照纵坐标升序的方式给出,每个星星左下方(包括正左,和正下)有k个星星,就是k级,问每级有多少个星星。 思路 只用看每个星星当前有多少个星星就可,因为他后面的纵坐标肯定大于等于它。 用一个level数组记录每个等级下有多少个星星,sum函数返回的是它之前有多少星星。 #include<iostream> using namespace std; const int N=320...原创 2020-02-25 10:45:42 · 479 阅读 · 0 评论