首先建立空樹,將 a[i] 逐個插入
計算乙個序列n排列的最小逆序數
首先用線段樹算出出事序列的逆序數,然後找規律推出排列的最小逆序數。
#include#include#include#include#include#include#include#include#include#include#include#include#include #include #include #include using namespace std;
#define max 5010
int a[5010];
int n;
int ans;
int sum;
struct
b[4 * max];
void build(int left, int right, int i)//建立空樹
void update(int value, int i)//更新第value個節點, 從跟節點1開始更新到葉子節點value
int mid = (b[i].left + b[i].right) / 2;
if (value <= mid)
update(value, i * 2);//左子樹
else
update(value, i * 2 + 1);//右子樹
b[i].num = b[i * 2].num + b[i * 2 + 1].num;//更新根節點
}int query(int id ,int n,int i)//計算有多少個
else
if (mid < n)
return ans1 + ans2; }}
int main()
ans = sum;
//printf("%d\n", ans);
for (int i = 0; i < n; i++)
printf("%d\n",ans);
} return 0;
}
HDU1394 求逆序數
hdu1394minimum inversion number 逆序數 a i 後面比它小的數的個數即為a i 的逆序數,題目要求的是序列的逆序數,求和即可 題意 乙個由0.n 1組成的序列,每次可以把隊首的元素移到隊尾,求形成的n個序列中最小逆序數 思路 乙個序列的逆序數可以用線段樹,或者暴力法求...
hdu 1394 線段樹求逆序數
線段樹求逆序數 求小逆序數 神奇 題意 給定乙個序列,對該序列的n種排列 排列如下 的每種排列 0 n 1 的逆序數求最小值 a1,a2,an 1,an a2,a3,an,a1 a3,a4,an,a1,a2 an,a1,a2,an 1 思路 先求出初始序列的逆序數,可以歸併,這裡用的是線段數求。設當...
hdu 1394 樹狀陣列求逆序數
解題思路 這道題是求迴圈陣列中逆序數最小值,求逆序數這裡肯定是用樹狀陣列。只是這裡有一點點變化,由於題目中n位數是0 n 1的乙個排列,所以num i 可表示為比num i 小的數的個數。把第一位的數挪到最後一位,那麼整個序列的逆序數變化為ans ans num 0 n 1 num 0 num 0 ...