洛谷 P1908 逆序對(線段樹區間求和 離散化)

2021-10-06 23:01:17 字數 1558 閱讀 3862

逆序對就是序列中 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,...