樹狀陣列 hdu2689 hdu2838

2022-05-01 11:57:10 字數 996 閱讀 6698

題意:給定乙個正整數n,和乙個1-n的乙個排列,每個數可以和旁邊的兩個數的任意乙個交換,每交換一次總次數就要加一,問將這個排列轉換成乙個遞增的排列需要多少次交換?

題意可以轉換成求這個排列的逆序對數。

#include#include

#include

#include

using

namespace

std;

const

int m=1e3+3

;int

bit[m],n;

void update(int x,int

c)int sum(int

x)int

main()

printf(

"%d\n

",ans);

}return0;

}

view code

題意:給定一串行,問排成公升序所要求的最少代價,序列中倆倆可相交換,代價為倆者的和

分析:對於每個數字x,我們只需要把它和前面比它大的數字交換,求出交換代價,重複執行就能得出答案。

這個代價就是,比它大的數字個數t*x+前面比它大的數字和。

#include#include

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int m=1e5+5

;ll cnt[m],sum[m],n;

void update(int x,int c1,int

c2)}

ll cntt(

intx)

ll summ(

intx)

intmain()

printf(

"%i64d\n

",ans);

}return0;

}

view code

HDU2689 Sort it(樹狀陣列求逆序數)

傳送門 如下 include include include define maxn 10000 using namespace std int n,tree maxn int lowbit int i int update int i,int x return 0 int query int n ...

hdu 3887 樹狀陣列

給你一棵樹,每個節點都有個編號。讓你求乙個節點他的子樹中編號比他小的節點有幾個。編號唯一,從1 n,已給出根節點 解 樹狀陣列統計。轉化為線性序列。可以想到的是,若要統計乙個節點,那麼比它小的孩子必須先插完,然後統計就行了。對於乙個節點i來說,只要把所有x那麼對於所有節點來說也是這樣的,從一開始插,...

hdu 3333 樹狀陣列

此題與3743相仿,但本題資料較大,需要用到離散化。如何去掉重複元素呢?採用離線演算法 首先將詢問按右端點從小到大排序,離線處理時,記錄每個元素所在位置,遇到重複元素時,從它之前出現的位置減去這個元素,這樣就是的每個元素總是出現在最後。include include include include ...