資料結構1 3 燈塔

2021-07-04 04:22:20 字數 1617 閱讀 3902

我自己用的merge排序,只有50通過。待我優化一下。

#include

using namespace std;

#define maxlength  4000000

typedef long long rank;

class node;

class nodelist

nodelist()

rank invertion(int lo, int mi, int hi);

rank invertioncount(int lo, int hi );

};void nodelist::copyfrom(node * a,int lo, int hi)

rank nodelist::invertion(int lo, int mi, int hi)

}a[i++] = b[j++];

};if ( ( k < rightnum ) && (! (j < leftnum) || c[k].x < b[j].x))

}a[i++] = c[k++];}}

delete b;

return countnum;

}rank nodelist::invertioncount(int lo, int hi )

int main()

nodelist *lista = new nodelist(a,n);

cout << lista->invertioncount(0,n);

}//參考網上的思路,先用快排對x座標進行排序,之後僅對y進行處理,計算逆序對數,之後用(n) * (n -1)/2 - 逆序對數 就是正序對數。過了95%

#include

#include

#define maxlength  4000000

typedef long long rank;

class node;

class nodelist

nodelist()

rank invertion(int lo, int mi, int hi);

rank invertioncount(int lo, int hi );

};void nodelist::copyfrom(node * a,int lo, int hi)

rank nodelist::invertion(int lo, int mi, int hi);

if ( ( k < rightnum ) && (! (j < leftnum) || c[k] < b[j]))

}delete b;

return countnum;

}rank nodelist::invertioncount(int lo, int hi )

int cmp(const void *a,const void *b)

int main()

qsort(a,n,sizeof(a[0]),cmp);

nodelist *lista = new nodelist(a,n);

rank tmp = rank(n) * rank(n - 1)/2;

printf("%lld",tmp - lista->invertioncount(0,n) );

}fread我真的是不太會了.....

資料結構基礎 13

採用鏈式儲存的棧成為鏈式棧 或簡稱鏈棧 鏈棧的優點是便於多個棧共享儲存空間和提高其效率,且不存在棧滿上溢的情況 因為鏈棧是靠指標鏈結到一起,只要記憶體夠大,則鏈棧理論上可以儲存的元素是沒有上限的 與順序棧相比,由於順序棧是採用的陣列實現,因此一旦陣列填滿,則必須重新申請記憶體,並將所有元素 搬家 而...

1 3 資料結構基礎概念

資料結構 資料 所有能被輸入到計算機中,且被計算機處理的符號的集合。資料元素 是資料的基本單元,由若干個資料項組成,也成為結點。資料項 是資料不可分割的最小單元,有時也成域 字段 資料物件 是指相同性質資料元素構成的集合。資料結構 是互相之間存在一種或多種關係的資料元素的集合。資料元素之間的關係,稱...

資料結構 day 13

佇列 陣列模擬佇列 一般操作 include using namespace std const int n 100010 在隊尾插入元素,在隊頭彈出元素 int q n hh,tt 1 插入 q tt x 彈出 hh 判斷佇列是否為空 if hh tt not empty else empty 取...