poj2299 樹狀陣列入門題

2021-08-16 05:21:53 字數 971 閱讀 8228

題意:利用樹狀陣列求逆序數;

思路:因為輸入範圍較大,先離散化一下,得到的陣列a記錄了原來陣列的大小關係;然後按下標順序執行add(a[i],1),這樣sum(a[i])得到的就是小於等於a[i]的個數,i-sum(a[i])即為a[i]前面比a[i]大的數的個數 //外迴圈n次並累加i-sum(a[i])得到逆序數

1 #include2 #include3 #include4 #include5

using

namespace

std;

6 typedef long

long

ll;7

8struct

nodea[500050

];11

12bool

cmp(node a, node b)

1516

int aa[500050],c[500050

];17

intn;

1819

int lowbit(int

x)20

2324

int sum(int

x)30

return

ret;31}

3233

void add(int x, int

d)37}38

39int

main()

4048 sort(a+1,a+n+1

,cmp);

49for(int i = 1; i <= n; ++i)

5053 memset(c,0,sizeof

(c));

54 ll ans = 0;55

for(int i = 1; i <= n; ++i)

5660 printf("

%lld\n

",ans);61}

62return0;

63 }

poj2299 樹狀陣列入門題

題意 利用樹狀陣列求逆序數 思路 因為輸入範圍較大,先離散化一下,得到的陣列a記錄了原來陣列的大小關係 然後按下標順序執行add a i 1 這樣sum a i 得到的就是小於等於a i 的個數,i sum a i 即為a i 前面比a i 大的數的個數 外迴圈n次並累加i sum a i 得到逆序...

poj 2299 樹狀陣列

題目大意 本題要用到樹狀陣列的離散化處理,因為資料太大 1 999999999 但還是wa了兩次,c i 的範圍計算錯誤,要用到long long 從後向前處理,每次處理乙個數,求比這個數小的個數。poj 2299 樹狀陣列 include include include include inclu...

POJ 2299 樹狀陣列入門 離散化入門

思路見注釋,套兩個模板就好,沒什麼技巧 理解了快速排序的時間複雜度 不難發現這道題是乙個 純樹狀陣列 逆序對 直接套模板就好了 樹狀陣列每個結點存放的是小於等於該結點的value 逆序對公式 逆序對 大於該value的個數 因為樹狀陣列的n取決於序列的最大值 所以套個離散化模板就好了 離散化模板為不...