求大小為n的陣列中有多少個逆序對。
因為n<=1e5,但是a[n]<=1e9,而且這道題和每乙個a[i]的具體數值並沒有任何關係,所以我們要用到離散化思想,將a[n]中的數字排序後重新賦值。之後就是正常的樹狀陣列求逆序對方法。
#include
using
namespace std;
#define int long long
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
const
int n=
5e5+5;
const
int inf=
0x3f3f3f3f
;int n,num=
0,a[n]
,t[n]
,arr[n]
;int
cmp(
int a,
int b)
intlowbit
(int k)
void
update
(int p)
}int
getsum
(int p)
return res;
}signed
main()
sort
(t+1
,t+n+
1,cmp)
;for
(int i=
1;i<=n;i++
)for
(int i=
1;i<=n;i++
) cout
}
洛谷P1908 逆序對(樹狀陣列)
題目描述 貓貓tom和小老鼠jerry最近又較量上了,但是畢竟都是成年人,他們已經不喜歡再玩那種你追我趕的遊戲,現在他們喜歡玩統計。最近,tom老貓查閱到乙個人類稱之為 逆序對 的東西,這東西是這樣定義的 對於給定的一段正整數序列,逆序對就是序列中ai aj且i輸入輸出格式 輸入格式 第一行,乙個數...
P1908 逆序對 樹狀陣列
p1908 題目描述 貓貓 tom 和小老鼠 jerry 最近又較量上了,但是畢竟都是成年人,他們已經不喜歡再玩那種你追我趕的遊戲,現在他們喜歡玩統計。最近,tom 老貓查閱到乙個人類稱之為 逆序對 的東西,這東西是這樣定義的 對於給定的一段正整數序列,逆序對就是序列中 ai aj且 iupdate...
P1908 逆序對 (樹狀陣列)
比較喜歡線段樹,懶得用樹狀陣列 只會套模板,位運算的精髓沒有領悟到 一直沒有記錄樹狀陣列 又得撿回來,趁這道題記錄一下模板,為三維偏序cdq套樹狀陣列鋪墊一下。解題思路 先對原陣列a從大到小排序,依次新增進樹狀陣列c裡,每次求字首和的結果就是 當前數的逆序對的個數。例如資料 55,44,22,66,...