逆序對就是序列中 ai>aj且i用乙個flag陣列標記哪些數字已經放入陣列中,用線段樹求flag的字首和,求放入的數字前已經放入了多少個比他小的數字。
#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,m,arr[n]
,a[n]
,ans[n<<2]
,tag[n<<2]
,t[n]
;intls(
int x)
intrs
(int x)
void
push_up
(int p)
void
build
(int p,
int l,
int r)
int mid=
(l+r)/2
;build(ls
(p),l,mid)
;build(rs
(p),mid+
1,r)
;push_up
(p);
}voidf(
int p,
int l,
int r,
int k)
void
push_down
(int p,
int l,
int r)
void
update
(int nl,
int nr,
int l,
int r,
int p,
int k)
push_down
(p,l,r)
;int mid=
(l+r)/2
;if(nl<=mid)
if(nr>mid)
push_up
(p);
}int
query
(int x,
int y,
int l,
int r,
int p)
int mid=
(l+r)/2
;push_down
(p,l,r);if
(x<=mid)
if(y>mid)
return res;
}signed
main()
sort
(t+1
,t+n+1)
;for
(int i=
1;i<=n;i++
)build(1
,1,n);
for(
int i=
1;i<=n;i++
) cout
}
洛谷P1908 逆序對(線段樹解法)
貓貓tom和小老鼠jerry最近又較量上了,但是畢竟都是成年人,他們已經不喜歡再玩那種你追我趕的遊戲,現在他們喜歡玩統計。最近,tom老貓查閱到乙個人類稱之為 逆序對 的東西,這東西是這樣定義的 對於給定的一段正整數序列,逆序對就是序列中ai aj且i第一行,乙個數n,表示序列中有n個數。第二行n個...
P1908 逆序對 線段樹題解
讀完題目,你的第一想法肯定是直接暴力就能過了。實際上在看完資料之後。qaq。好吧,肯定不能暴力,那 麼現在就要去尋找它的特徵。根據它的特徵,我們可以分析出要用線段樹去做這道題。那麼當我們確定這個演算法時,我 來的順序再排回來,然後根據每乙個數的大小對號入座,在入座的過程中我們計算在這個葉子節點的右邊...
線段樹動態開點 洛谷P1908逆序對
題目鏈結 題目描述 貓貓tom和小老鼠jerry最近又較量上了,但是畢竟都是成年人,他們已經不喜歡再玩那種你追我趕的遊戲,現在他們喜歡玩統計。最近,tom老貓查閱到乙個人類稱之為 逆序對 的東西,這東西是這樣定義的 對於給定的一段正整數序列,逆序對就是序列中ai aj且i輸入格式 第一行,乙個數n,...