我自己用的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 取...