8.23

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37891604/article/details/81988781

POJ 2299 Ultra-QuickSort(树状数组+离散化 归并排序求逆序)

这也是一个结论题。每次只能交换相邻的元素,从而使整个序列上升有序,问最少需要交换几次,就是求逆序数。从前往后求逆序数,就相当于从后往前看比当前加入的数小的个数呗。

离散化就是数太大了,相应到都减小,但保持原有的大小关系。怎么操作呢?

设一个结构体,有两个变量,一个变量保存数的值,另一个变量保存此数的位置,然后输入结构体,按数的大小,由小到大排序,然后又由这个数的位置代替这个数,如果这个数在前面出现过,就是他出现过的位置。

POJ 2352 Stars(树状数组) 

题意:给出n个星星的点的坐标,每个坐标都不相同,坐标按y递增给出,y相同时,按x坐标递增给出,每个星星都有等级,等级是这个星星左下方的星星的个数,不包括它自己,输出每个等级星星的数量。

分析:由于y递增给出,求第i个星星的等级,就是看比i的x坐标小的有几个星星,就是第i个星星的等级。裸题了。注意x可能有0,所以x++!!!!,因为树状数组必须从1开始!!!!

POJ 2481 Cows(树状数组)

这个也需注意,区间左端点可能有0。怎么做?涉及到区间一般都会拍拍序,对于任意两头牛i和j,只有当Si <= Sjand Ej <= Ei and Ei - Si > Ej – Sj时,i才比j强壮,即:如果将所有牛的E区间按从大到小排序(如果E相同,则S小的排在前面)的话,那当前读取到第i个牛的Si和Ei,那么之前(假设任意牛的区间不会完全相同)的牛的Sj(j<=i-1)<=Si的这些牛就都比i号牛强壮了。所以我们首先对读取到的区间排序,然后可以用树状数组利用牛的S坐标来算出结果。需要注意的是如果两个区间完全一样,那么这两头牛不能互为强壮。怎么操作呢?就让它和前面和它一样的牛一样呗。

HDU 1394 Minimum Inversion Number(树状数组)

先求出一开始的逆序数,后就讨论不同序列的情况,当某一时刻首位a[i]被移动到最后一位,那么原序列由a[i]组成的倒置数有a[i]-1个(此时a[i]加过1),也就是后面比他小的个数(因为是首位,前面不需要考虑)。同理,加到最后一个后,他前面有n-a[i]个数可以和a[i]形成倒置数。即n - a[i] - (a[i] - 1)

HDU 3743 Frosh Week(树状数组或归并排序求逆序)

这个和poj2299一样的,就是求逆序数。

HDU 2838 Cow Sorting(树状数组)

也是逆序数。题意:和以前求逆序数的题意一样,不过这不是求总共多少个逆序数,而是求如a[i-1]>a[i]花费就是a[i-1]+a[i],问使整个序列上升有序最小的花费。以前是求得使整个序列上升有序最小的交换次数。这个也一样。随便搞一搞就过了。之一longlong

POJ 2182 Lost Cows

这个题目,思维题,暴力即可,就是求每个数知道前面有几个数比他小,让你输出它的编号。

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_37891604/article/details/81988781