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

2021-08-21 18:40:01 字數 794 閱讀 7607

思路見注釋,套兩個模板就好,沒什麼技巧

//理解了快速排序的時間複雜度 不難發現這道題是乙個

//純樹狀陣列 + 逆序對 直接套模板就好了

//樹狀陣列每個結點存放的是小於等於該結點的value

//逆序對公式:逆序對=大於該value的個數

//因為樹狀陣列的n取決於序列的最大值

//所以套個離散化模板就好了

//離散化模板為不重複模板

//lowbit的含義是計算二進位制數中從右數第乙個1的位置

//例如6(0110)->2

#include#include#include#include#define lowbit(x) (x&(-x))

using namespace std;

const int maxn=5e5+10;

struct node p[maxn];

int n,bit[maxn],a[maxn];

bool cmp(const node& a,const node& b)

return ans;

}int main(void)

sort(p+1,p+n+1,cmp);

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

a[p[i].pos]=i;

long long ans=0;

memset(bit,0,sizeof(int)*(n+5));

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

cout<}

return 0;

}

POJ 2299(樹狀陣列,離散化)

題意 求逆序數 題解 可以將數字插入樹狀陣列,每次統計比單前數字小的個數,我們將每個數字的權值設定為1,那麼只要求在他前面數字的和就知道了,對應的逆序數格個數是i sum a i 這裡使用樹狀 陣列維護區間和 這一題由於數字範圍過大,記憶體無法承受如此大的空間,我們可以看到n最多才5e5,所以最多有...

poj 2299 樹狀陣列 離散化

樹狀陣列求逆序數 離散化 求逆序數時,加入當前數字,然後統計大於當前數字的數字個數,題目資料很大,需先將其離散化。include include include define n 500005 define lowbit x x x using namespace std int c n a n s...

POJ 2299 樹狀陣列,離散化

題目大意 求一組數的逆序數有多少個 題目解析 用樹狀陣列做,向下更新,向上求和,因為資料範圍太大,但是每個數都不一樣所以先離散化一下 ac include include include include includeusing namespace std typedef long long ll ...