#include #include #include using namespace std;
#define n 5000+5
#define debug 1
int c[n] = ;
int a[n] = ;
int lowbit(int x)
int getsum(int x,int n)
return ans;
}void update(int x,int value,int n)
}int main()
int min_inver_num = inver_num;
//此時已算出乙個序列的全部逆序對個數
//再每次將最前面的數字移到末尾,求得新序列的逆序對
//將最前面的數字移到最後面,意味著現在要將這個數最後
//乙個插入進去,所以它後面的數都會成為逆序對。
//故應該 + (sum[n] - sum[ai])
//又因為它是第乙個放進去的,所以它只會影響序列在它之前的
//故也要 - (sum[ai]-1)
for(int i=1;icout<}
//cout << "hello world!" << endl;
return 0;
}
hdu1394 樹狀陣列 解法
本題使用樹狀陣列果然更加快。樹狀陣列難點 1 如何遍歷樹 2 如何利用陣列資料 建立乙個樹狀陣列就如上圖紅色部分代表所有的樹狀陣列節點了。基本操作 查詢下乙個節點的計算,如不明白下面函式的作用,請檢視負數記憶體存放的問題。簡而言之就是 內存放是求反 1 利用這個函式可以神奇地尋找到其單親節點和兄弟節...
hdu1394 線段樹 樹狀陣列
題目 就是求乙個陣列的逆序數,然後依次將陣列的第乙個數調到最後,最後求出最小的逆序數 做了兩種,線段樹和樹狀陣列 利用線段樹求逆序數 每次將數字x插到線段樹的 x 位置,然後球一下,該線段樹右邊的和,即為逆序數的個數 第一次用線段樹,做這個。include include include inclu...
hdu 1394 樹狀陣列求逆序數
解題思路 這道題是求迴圈陣列中逆序數最小值,求逆序數這裡肯定是用樹狀陣列。只是這裡有一點點變化,由於題目中n位數是0 n 1的乙個排列,所以num i 可表示為比num i 小的數的個數。把第一位的數挪到最後一位,那麼整個序列的逆序數變化為ans ans num 0 n 1 num 0 num 0 ...