洛谷 題解 P1908 逆序對

2022-02-13 21:59:45 字數 749 閱讀 4449

一開始竟然妄想用\(n^2\)的演算法過這題,然而這是不可能的

所以只好寫歸併排序來求逆序対惹

比如將下面兩個區間排序

3 4 7 9     1 5 8 10
首先將右區間的\(1\)取出,放到\(r_k\)中,此時 1 是比每個\(a_i\)中的元素都小,也就是說此時\(i\)的指標指向\(a_1\)的位置,此刻得到的逆序對的數量為\(4\);\(r_k\)= 1;

以此類推,直到進行完歸併排序,每次合併都會求出逆序對的數目,即\(mid-i+1\),最後每次將\(ans\)加上\(mid−i+1\)即可得到

直接上**

#includeusing namespace std;

int n;

int a[500010],t[500010];

long long ans=0;//存逆序對的個數

inline int read()

while(c>='0'&&c<='9')

return tot*f;

}inline void midsort(int l,int r)//歸併排序

} while(i<=mid)t[k++]=a[i++];

while(j<=r)t[k++]=a[j++];//把剩下的合進去

for(int i=l;i<=r;i++)a[i]=t[i];//複製一遍,以便下一波操作

}int main()

洛谷 P1908 逆序對

題目描述 貓貓tom和小老鼠jerry最近又較量上了,但是畢竟都是成年人,他們已經不喜歡再玩那種你追我趕的遊戲,現在他們喜歡玩統計。最近,tom老貓查閱到乙個人類稱之為 逆序對 的東西,這東西是這樣定義的 對於給定的一段正整數序列,逆序對就是序列中ai aj且i var i,n,t longint ...

洛谷P1908 逆序對

貓貓tom和小老鼠jerry最近又較量上了,但是畢竟都是成年人,他們已經不喜歡再玩那種你追我趕的遊戲,現在他們喜歡玩統計。最近,tom老貓查閱到乙個人類稱之為 逆序對 的東西,這東西是這樣定義的 對於給定的一段正整數序列,逆序對就是序列中ai aj且i輸入格式 第一行,乙個數n,表示序列中有n個數。...

洛谷 P1908 逆序對

貓貓tom和小老鼠jerry最近又較量上了,但是畢竟都是成年人,他們已經不喜歡再玩那種你追我趕的遊戲,現在他們喜歡玩統計。最近,tom老貓查閱到乙個人類稱之為 逆序對 的東西,這東西是這樣定義的 對於給定的一段正整數序列,逆序對就是序列中ai aj且i 輸入格式 第一行,乙個數n,表示序列中有n個數...